首页 > 系统 > Android > 正文

Android--逐帧动画FrameAnimation

2019-11-07 23:46:29
字体:
来源:转载
供稿:网友

先来说说什么是逐帧动画,逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 评价

优势就是动画细腻灵活,缺点

  在Android中逐帧动画需要得到AnimationDrawable类的支持,是Drawable的间接子类。它主要用来创建一个逐帧动画,并且可以对帧进行拉伸,把它设置为View的背景即可使用AnimationDrawable.start()方法播放。既然逐帧动画是需要播放一帧一帧的图像,所以需要为其添加帧。在Android中提供了两种方式为AnimationDrawable添加帧:xml定义的资源文件和代码创建,后面再详细讲讲这两种添加帧的方式。 这里我就先介绍一下这个类的方法

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循环播放 (注意这里默认是false)

好了下面给大家说下添加桢的两种方法 一种是xml文件

1 <?xml version="1.0" encoding="utf-8"?>2 <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" >3 <!-- 定义一个动画帧,Drawable为img0,持续时间50毫秒 -->4 <item android:drawable="@drawable/img0" android:duration="50" />5 </animation-list>

另一种代码

frameAnim =new AnimationDrawable(); // 为AnimationDrawable添加动画帧 第一个参数是图片资源,第二个是持续时间 frameAnim.addFrame(getResources().getDrawable(R.drawable.img0), 50);

给个测试代码

public class DongHuaActivity extends AppCompatActivity { PRivate Button btn_click; private ImageView btn_donghua; private AnimationDrawable animaition; boolean flag=true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dong_hua); btn_donghua= (ImageView) findViewById(R.id.btn_donghua); btn_donghua.setBackgroundResource(R.drawable.anim_hujiao); animaition = (AnimationDrawable)btn_donghua.getBackground(); animaition.setOneShot(true); btn_donghua.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (flag){ start(); flag=false; }else { stop(); flag=true; } } }); btn_click= (Button) findViewById(R.id.btn_click); btn_click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ImageButtonClickUtils.setClickState(btn_click,R.mipmap.img_home,R.mipmap.img_home1); } }); } /** * 开始播放 */ protected void start() { if (animaition != null && !animaition.isRunning()) { animaition.start(); Toast.makeText(DongHuaActivity.this, "开始播放", 0).show(); Log.i("main", "index 为5的帧持续时间为:"+animaition.getDuration(5)+"毫秒"); Log.i("main", "当前AnimationDrawable一共有"+animaition.getNumberOfFrames()+"帧"); } } /** * 停止播放 */ protected void stop() { if (animaition != null && animaition.isRunning()) { animaition.stop(); Toast.makeText(DongHuaActivity.this, "停止播放", 0).show(); } }}

先写这个,其他动画我有空写,我原来写的都没写什么注释 郁闷无奈~~(>_<)~~


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表