Android-Animation动画之Frame Animation帧动画

这节讲讲Animation的另外一种形式——Frame Animation帧动画

帧动画就是逐帧显示一张图片,来实现动画的效果。

使用帧动画,就要用到AnimationDrawable这个类了。

在本示例,将实现一个转圈加载的动画。

首先,需要有几张图片。安卓并不直接支持gif格式的文件。我们需要把gif图片的每一帧作为一个单独的图片取出来,放到资源文件里去。

我这里一共有8张图片:loading1.png、loading2.png、···、loading8.png

然后,在res文件夹下创建anim文件夹,并在anim文件夹下创建一个名为loading.xml的文件,里面的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<animation-list
	android:oneshot="false"
	xmlns:android="http://schemas.android.com/apk/res/android">
	<item
		android:duration="160"
		android:drawable="@drawable/loading1"/>
	<item
		android:duration="160"
		android:drawable="@drawable/loading2"/>
	<item
		android:duration="160"
		android:drawable="@drawable/loading3"/>
	<item
		android:duration="160"
		android:drawable="@drawable/loading4"/>
	<item
		android:duration="160"
		android:drawable="@drawable/loading5"/>
	<item
		android:duration="160"
		android:drawable="@drawable/loading6"/>
	<item
		android:duration="160"
		android:drawable="@drawable/loading7"/>
	<item
		android:duration="160"
		android:drawable="@drawable/loading8"/>
</animation-list>
oneshot:是否只逐帧显示一次。

duration:该图片显示的毫秒值。

该资源文件如同一张图片,它产生的一个对象是继承于Drawable的AnimationDrawable(注意:是Drawable,不是一个Animation),你只需要在控件里将它引入到background里就可以。

<TextView
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:background="@anim/loading"/>
这样做完之后,动画还是不能自己动的,需要我们给它一个开始动的调用。

AnimationDrawable loadingDw = ((AnimationDrawable)loadingTxv.getBackground());
				if(loadingDw.isRunning()){
					loadingDw.stop();
				}else{
					loadingDw.start();
				}

loadingTxv就是上面使用了这个动画的TextView,获得它的background后,强转成AnimationDrawable,调用AnimationDrawable的start方法可以让它开始动,stop是停止。

完成!!

另外,如果你的动画不是在xml文件里引入到控件里,而是在java代码里面setBackgroundResource引入的。那么,如果你马上调用start方法的话,动画还是不能动起来。因为它需要等待drawable绘制完毕,调用start才有意义。要解决这个问题,你可以参照以下代码来做:

loadingTxv.setBackgroundResource(R.anim.loading);
			        Object ob = loadingTxv.getBackground(); //获取Drawable对象
			        loadingAnim = (AnimationDrawable) ob;	//将该AnimationDrawable对象传递给其它外部引用
			        Message msg = new Message();    //使用handler发送一个开启动画的消息,然后在handler的接收方法里面调用loadingAnim.start()
                                msg.what = 1;
                                handler.sendMessage(msg);


对动画的介绍暂时到这里,有时间还会介绍其它更丰富的动画形式,包括LayoutAnimationController、GridLayoutAnimationController等。


本节demo下载:http://download.csdn.net/detail/wzg_1987/5635691


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值