Android 逐帧动画

引言:

Android提供的动画有两种分别为TweenAnimation和FrameAnimation。Tween动画主要实现了渐变,缩放,平移以及旋转的效果。

Frame动画即逐帧动画,就是将动画分解成关键帧图片连续形成动画,或者说在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。本片博客讲述的就是逐帧动画。逐帧动画的优势在于具有较强的灵活性,几乎可以完成任何想要的动画效果,但是也是复杂的效果对为文件的压力越大。


逐帧动画的使用依赖于AnimationDrawable类的支持。它位于"android.graphics.drawable.AnimationDrawable"包下,是Drawable的间接子类。它主要用来创建一个逐帧动画,并且可以对帧进行拉伸,把它设置为View的背景即可使用AnimationDrawable.start()方法播放。由于逐帧动画是一帧帧的播放图片所以需要添加帧图片,Android提供了两种添加的方式,java代码创建以及xml文件引用资源文件。

1,采用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/loading_1"
        android:duration="300"/>
    <item
        android:drawable="@drawable/loading_2"
        android:duration="300"/>
</animation-list>
每一个item就是一帧图片,duration为每一帧持续的时间。在Java代码中:

loadingImg.setBackgroundResource(R.anim.animation_list);
AnimationDrawable anim = (AnimationDrawable)loadingImg.getBackground();
anim.start();
将配置文件设置为想要的View的背景,获得AnimationDrawable对象调用他的start()方法启动动画。通过stop()方法来终止动画。

2,使用java设置动画资源

其实和使用xml的方式一样,没有什么太大的区别。

                AnimationDrawable frameAnim =new AnimationDrawable();
		frameAnim.addFrame(getResources().getDrawable(R.drawable.loading_1), 300);
		frameAnim.addFrame(getResources().getDrawable(R.drawable.loading_2), 300);
		frameAnim.setOneShot(false);
		loadingImg.setBackgroundDrawable(frameAnim);
		frameAnim.start();
setOneShot()方法用来设计动画是否循环播放。false为循环播放。


3,下面是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循环播放






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值