欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android animation动画【学习】

程序员文章站 2022-03-09 20:16:09
...

 

两种实现方式:

①Tween Animation 。

②Frame Animation是顺序播放事先做好的图像,跟电影类似。

第二种方法相对比较简单,做个demo:

res/anim/loading_anim.xml :

 

 

<?xml version="1.0" encoding="UTF-8"?>

<!-- 使用Frame Animation方式实现动画的格式是:
首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画 
XML属性及其说明
drawable	              当前帧引用的drawable资源
duration	             当前帧显示的时间(毫秒为单位)
oneshot	                        如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
variablePadding	 If true, allows the drawable’s padding to change based on the current state that is selected.
visible	                       规定drawable的初始可见性,默认为flase -->

<animation-list android:oneshot="false"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:duration="200" android:drawable="@drawable/loading1" />
    <item android:duration="200" android:drawable="@drawable/loading2" />
    <item android:duration="200" android:drawable="@drawable/loading3" />
    <item android:duration="200" android:drawable="@drawable/loading4" />
    <item android:duration="200" android:drawable="@drawable/loading5" />
    <item android:duration="200" android:drawable="@drawable/loading6" />
    <item android:duration="200" android:drawable="@drawable/loading7" />
    <item android:duration="200" android:drawable="@drawable/loading8" />
</animation-list>

 

 

 WelcomeAct:

 

public class WelcomeAct extends Activity {
	private AnimationDrawable rocketAnimation;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 设置登录无标题栏
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.welcome);
//		ProgressBar loading = (ProgressBar)findViewById(R.id.loading);
//		loading.setVisibility(View.VISIBLE);
		
		ImageView rocketImage = (ImageView) findViewById(R.id.loading);
		rocketImage.setBackgroundResource(R.anim.loading_anim); 
		rocketAnimation = (AnimationDrawable)rocketImage.getBackground();
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_DOWN) {
			rocketAnimation.start();
			return true;
			}
		return super.onTouchEvent(event);
	}
}

 

 注意:启动Frame Animation动画的代码rocketAnimation.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。

 

Android SDK中对AnimationDrawable的介绍:

AnimationDrawable

获取、设置动画的属性  
int getDuration() 获取动画的时长
int getNumberOfFrames() 获取动画的帧数
boolean isOneShot()

 

Void setOneShot(boolean oneshot)

获取oneshot属性
设置oneshot属性
void inflate(Resurce r,XmlPullParser p,
AttributeSet attrs)
 
增加、获取帧动画
Drawable getFrame(int index) 获取某帧的Drawable资源
void addFrame(Drawable frame,int duration) 为当前动画增加帧(资源,持续时长)
动画控制
void start() 开始动画
void run() 外界不能直接掉调用,使用start()替代
boolean  isRunning() 当前动画是否在运行
void stop() 停止当前动画