AnimationDrawable是Android实现动画的一种简单的形式,可以用来实现帧动画。

1.在res/drawable下定义friend.xml文件:

<?xml version="1.0" encoding="utf-8"?><animation-list android:oneshot="false"xmlns:android="http://schemas.android.com/apk/res/android"><item android:duration="400" android:drawable="@drawable/friend_light" /><item android:duration="400" android:drawable="@drawable/friend" /></animation-list> 
其中,每一个item是一帧,android:duration="400"表示每帧持续400ms,android:drawable是每帧要显示的图片。

2.在java代码中载入和执行动画:

①载入动画

Button friend = (Button)findViewById(R.id.friend_btn);friend.setBackgroundResource(R.drawable.friend_anim);AnimationDrawable friend_anim= (AnimationDrawable) friend.getBackground();

②执行动画

friend_anim.start();
③停止动画

friend_anim.stop();

3. 注意:

默认情况下,在OnCreate()中执行animation.start();是无效的,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。

解决办法:

①调用View的getViewTreeObserver().addOnPreDrawListener()

friend.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener(){@Overridepublic boolean onPreDraw() {// TODO Auto-generated method stubfriend_anim.start();return true;}});

②使用Handler

public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    friend = (Button)findViewById(R.id.friend_btn);    handler.postDelayed(new Runnable() {        public void run() {        friend.setBackgroundResource(R.drawable.friend_anim);        friend_anim = (AnimationDrawable) friend.getBackground();        friend_anim.start();        }    }, 50);} 






更多相关文章

  1. Android自己主动化測试解决方式
  2. android uiautomator自己主动化測试
  3. Android:Animation
  4. Android图文详解属性动画
  5. 开机动画(闪动的ANDROID字样的动画图片)
  6. Android动态加载入门 简单加载模式
  7. Android(安卓)博客目录整理
  8. Android开机动画过程
  9. android中实现swipe的手势功能及页面拖动动画

随机推荐

  1. 布局与样式
  2. Android(安卓)五大布局(自我学习向)
  3. React Native 中Android实现ImagePicker
  4. android Jni 需要注意的地方
  5. Android文件存储总结
  6. Android(安卓)内部存储与外部存储的路径
  7. 一看就会Android之分组列表组件Expandabl
  8. Android学习之Pair类 (android.util.Pair
  9. Android(安卓)与github的使用
  10. Android(安卓)JetPack以及框架MVVM