您的位置:首页 > 移动开发 > Android开发

Android中的AnimationDrawable(图片动画)介绍及使用

2014-01-15 17:40 453 查看
Drawable animation可以加载Drawable资源实现帧动画。AnimationDrawable是实现Drawable animations的基本类。推荐用XML文件的方法实现Drawable动画,不推荐在代码中实现。这种XML文件存放在工程中res/drawable/目录下。XML文件的指令(即属性)为动画播放的顺序和时间间隔。

使用步骤:

1.定义动画文件,即变化的图片文件

     在XML文件中<animation-list>元素为根节点,<item>节点定义了每一帧,表示一个drawable资源的帧和帧间隔。下面是一个XML文件的实例:

rocket_thrust.xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />

</animation-list>


设置Android:oneshot属性为true,表示此次动画只执行一次,最后停留在最后一帧。设置为false则动画循环播放。文件可以添加为Image背景,触发的时候播放。

2.然后在代码中定义出AnimationDrawable对象,并设置到view的background上,然后设置开始播放就可以了:

使用方式:

    方式1:Drawable Animation本身就是一个Drawable资源文件,所以直接在xml中设置为指定View的背景即可。然后启动animation.start().

    方式2:代码中通过View. setBackgroundResource(resID).   然后启动 animation.start().

看例子:

AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust); //roket_trust为定义的XML文件
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

}
public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}

return super.onTouchEvent(event);
}


注意:,一旦给指定View设置Drawable Animation之后,其BackGround就变成AnimationDrawable对象,代码如下: rocketAnimation = (AnimationDrawable) rocketImage.getBackground();注意:,一旦给指定View设置Drawable Animation之后,其BackGround就变成AnimationDrawable对象,代码如下: rocketAnimation = (AnimationDrawable) rocketImage.getBackground();注意:,一旦给指定View设置Drawable
Animation之后,其BackGround就变成AnimationDrawable对象,代码如下: rocketAnimation = (AnimationDrawable) rocketImage.getBackground();注意:,一旦给指定View设置Drawable Animation之后,其BackGround就变成AnimationDrawable对象,代码如下: rocketAnimation = (AnimationDrawable) rocketImage.getBackground();注意:,一旦给指定View设置Drawable
Animation之后,其BackGround就变成AnimationDrawable对象,代码如下: rocketAnimation = (AnimationDrawable) rocketImage.getBackground();注意:,一旦给指定View设置Drawable Animation之后,其BackGround就变成AnimationDrawable对象,代码如下: rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

 

start()方法不能在onCreate()函数中调用。因为AnimationDrawable并未完全关联到Window,在onCreate()方法中,View并未完成显示(同理,在此方法中测量某个View的宽高,常得到0值。也同理SurfaceHolder要增加Callback方法)。在此如果想最快的启动动画,使用监听方法onWindowFoucsChanged().

//获得我们xml定义的AnimationDrawable

animDrawable=(AnimationDrawable) getResources().getDrawable(R.anim.frame_animation);

一段参考代码:

@Override

publicvoid onWindowFocusChanged(boolean hasFocus) {

// TODO Auto-generated method stub

if(hasFocus) {

imageView.setBackgroundResource(R.anim.frame_animation);

animDrawable = (AnimationDrawable) imageView.getBackground();

animDrawable.start();
}
}


虽说最好用xml文件定义动画,但仍然可以使用代码实现,具体参考http://blog.csdn.net/sjf0115/article/details/7265307

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AnimationDrawable