注意:逐帧动画在Android下可以通过代码和XML文件两种方式定义
下面简单介绍一下AnimationDrawable的常用方法:
void start():开始播放逐帧动画。
void stop():停止播放逐帧动画。
void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。
int getDuration(int i):得到指定index的帧的持续时间。
Drawable getFrame(int index):得到指定index的帧Drawable。
int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。
boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。
boolean isRunning():当前AnimationDrawable是否正在播放。
void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放
资源图片
1.activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/frame"/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="doClick"
android:text="动起来!" />
</RelativeLayout>
2.在res/drawble/frame.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 配置文件中定义帧动画的执行过程 android:oneshot="false" 设置为false会不停的循环播放动画
android:duration 表示展示所用的该图片的时间长度-->
<item android:duration="150" android:drawable="@drawable/p1"/>
<item android:duration="150" android:drawable="@drawable/p2"/>
<item android:duration="150" android:drawable="@drawable/p3"/>
<item android:duration="150" android:drawable="@drawable/p4"/>
<item android:duration="150" android:drawable="@drawable/p5"/>
<item android:duration="150" android:drawable="@drawable/p6"/>
</animation-list>
3.MainActivity.java
package cn.tedu.android_day12_animation;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setViews();
}
private void setViews() {
textView = (TextView) findViewById(R.id.textView);
}
public void doClick(View view){
switch (view.getId()) {
case R.id.button1:
startFrameAnimation();
break;
}
}
//启动帧动画
private void startFrameAnimation() {
//配置文件方式
AnimationDrawable ad=(AnimationDrawable) textView.getBackground();
/*
* //使用代码给animationDrawable添加帧
ad.addFrame(getResources().getDrawable(R.drawable.p6), 150);
ad.addFrame(getResources().getDrawable(R.drawable.p5), 150);
ad.addFrame(getResources().getDrawable(R.drawable.p4), 150);
ad.addFrame(getResources().getDrawable(R.drawable.p3), 150);
ad.addFrame(getResources().getDrawable(R.drawable.p2), 150);
ad.addFrame(getResources().getDrawable(R.drawable.p1), 150);
*/
// 动画是否正在运行
if(ad.isRunning()){
//停止动画播放
ad.stop();
}
else{
//开始或者继续动画播放
ad.start();
}
}
}
4.效果图