android 帧动画

本文主要讲解Drawable Animation,从xml实现,代码实现两个方面来讲解。

一 xml实现

通过xml来指定需要加载的帧,在res/drawable/目录下,创建一个包含<animation-list>的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>

以上的xml指定了3个帧,名为rocket_thrust1rocket_thrust2rocket_thrust3,随后在代码中使用这个animation-list

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);
    rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}

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

将这个drawable list设置为控件的背景,随后将其取出并强转为AnimationDrawable,就可以调用start()方法来开始播放了。

xml中常用的属性如下表格:

属性名 描述
android:drawable 需要加载的drawable对象
android:duration 每一帧动画的持续时间
android:oneshot 动画是否只执行一次,ture代表真
android:visible 动画初始可见状态

二 代码实现

使用代码实现也是比较简单的,首先创建一个AnimationDrawable对象,随后将每帧逐一的添加到该对象中,随后调用start方法就可以开始动画了。代码如下:

mAnimationDrawable = new AnimationDrawable();
mAnimationDrawable.addFrame(mDrawable, 500);
mAnimationDrawable.start();

代码相对比较简单,详细的就不再赘述了。AnimationDrawable的常见方法见下列表格:

方法名 描述
addFrame(Drawable frame, int duration) 添加帧到动画中,并指定时间
getDuration(int i) 获得帧动画的时间
getFrame(int index) 获得指定索引的Drawable对象
getNumberOfFrames() 获得帧的总数
isRunning() 是否处于运行状态
setOneShot(boolean onsShot) 设置是否只运行一次
start() 开始
stop() 停止
setVisible(boolean visible, boolean restart) 设置可见度,以及是否要重新开始

帧动画就到这里,下面开始讲解视图动画!

你可能感兴趣的:(android,动画,drawable,animation,帧动画)