AnimationDrawable的使用

1.定义

AnimationDrawable:一个用来创建帧动画的对象,由一系列的Drawable对象定义,可以设置成一个View对象的背景。


2.使用

(1)在/res/drawable目录下,新建一个xml文件,定义<animation-list>根节点,在其中可以使用android:oneshot="true"或者android:oneshot="false"来标示是否需要循环播放。

在根节点中使用<item>来定义动画需要显示的帧,其中使用android:drawable=@drawable/xxx"来使用Drawable资源,使用android:duration="xx"来控制一张图片显示的时间。

(2)在代码中,把ImageView的背景先设置成在drawable中定义的xml文件,然后定义AnimationDrawable对象,AnimationDrawable对象初始化为由ImageView获得的背景资源。然后使用AnimationDrawable的start()和stop()函数来控制播放。


3.实例

/res/drawable/下的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/first"
        android:duration="60"/>
    <item
        android:drawable="@drawable/second"
        android:duration="60"/>
    <item
        android:drawable="@drawable/third"
        android:duration="60"/>
    <item
        android:drawable="@drawable/forth"
        android:duration="60"/>
    <item
        android:drawable="@drawable/fifth"
        android:duration="60"/>

</animation-list>


代码:

public class MainActivity extends Activity implements OnClickListener{

	private Button startBtn = null;
	private Button stoptBtn = null;
	private ImageView animIv = null;
	private AnimationDrawable ad = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		startBtn = (Button) findViewById(R.id.start_btn);
		stoptBtn = (Button) findViewById(R.id.stop_btn);
		animIv = (ImageView) findViewById(R.id.anim_iv);
		
		//若不设置背景资源,则得到的ad为null,frame_anim为自定义的要显示的图片
		animIv.setBackgroundResource(R.drawable.frame_anim);
		//在layout文件中,animIv不能设置背景,
		//否则此时animIv.getBackground()得到的是BitmapDrawable,转换成AnimationDrawable会报错
		ad = (AnimationDrawable) animIv.getBackground();
		
		startBtn.setOnClickListener(this);
		stoptBtn.setOnClickListener(this);
		
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.start_btn:
			ad.start();
			break;
		case R.id.stop_btn:
			ad.stop();
			break;
		}
	}

}

4.遇到的一些问题

(1)在xml文件中给ImageView设置背景为一张图片,然后代码中没有写setBackgroundResource,导致出现

android.graphics.drawable.BitmapDrawable cannot be cast to android.graphics.drawable.AnimationDrawable 错误而不能正常运行

(2)没有给ImageView设置背景资源,导致ad = (AnimationDrawable) animIv.getBackground()为null,报空指针异常。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值