本文主要讲解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_thrust1
,rocket_thrust2
,rocket_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) | 设置可见度,以及是否要重新开始 |
帧动画就到这里,下面开始讲解视图动画!