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>
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(){
- @Override
- public boolean onPreDraw() {
- // TODO Auto-generated method stub
- friend_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);
- }