view动画之Frame Animation 帧 动画的实现

在Android中,动画Animation的实现有两种方式:Tween Animation(渐变动画)和 Frame Animation(帧动画)。渐变动画是通过对场景里的对象不断做图像变换(平移、缩放、旋转等)产生动画效果。帧动画则是通过顺序播放事 先准备好的图像来产生动画效果,和电影类似。

  帧动画主要是通过AnimationDrawable类来实现的。

1.AnimationDrawable类

  AnimationDrawable类用于创建由一系列Drawable对象构成的逐帧动画对象,它可以作为一个视图对象的背景。

  AnimationDrawable类的常用方法有以下一些:

  mAnimationDrawable.addFrame(Drawable frame, int duration);//添加一个帧动画

  mAnimationDrawable.getDuration(int i);//获得帧动画的时间

  mAnimationDrawable.getFrame(int index);//获得指定索引的Drawable对象

  mAnimationDrawable.getNumberOfFrames();//获得帧动画的总数

  mAnimationDrawable.isOneShot();//帧动画是否只运行一次

  mAnimationDrawable.isRunning();//帧动画是否处于运行状态

  mAnimationDrawable.setOneShot(boolean onsShot);//设置帧动画是否只运行一次

  mAnimationDrawable.setVisible(boolean visible, boolean restart);//设置帧动画是否可见

  mAnimationDrawable.start();//运行帧动画

  mAnimationDrawable.stop();//停止帧动画

2.通过Java代码实现Frame Animation动画

  要实现Frame Animation动画,需要创建一个AnimationDrawable对象来表示Frame动画,然后通过addFrame()方法把每一帧要显示的内容添加进去,最后通过start()方法就可以播放动画了。

  setOneShot()方法可以设置动画是否需要重复播放。

3.通过xml布局文件实现Frame Animation动画

  逐帧动画的实现,也可以通过xml布局文件来完成。xml文件可以存放在工程的res/anim目录下。

  Frame动画的xml文件常用属性如下:

android:drawable[drawable]//加载Drawable对象

android:duration[long]//每一帧动画的持续时间(单位ms)

android:oneshot[boolean]//动画是否只运行一次,true运行一次,false重复运行

android:visible[boolean]//Drawable对象的初始能见度状态,true可见,false不可见(默认为false)

4.例子:

首先在drawalbe下创建一个xml文件:anim_iconset.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false">
    <!-- oneshot为false代表重复播放动画 -->
    <item android:drawable="@drawable/a" android:duration="500"/>
    <item android:drawable="@drawable/b" android:duration="500"/>
    <item android:drawable="@drawable/c" android:duration="500"/>

</animation-list>

然后在布局文件中创建一个布局,包括按钮和 ImageView:

最后在java代码中开启动画:

/*
使用帧动画:也就是多张图片在指定的时间里显示完,让人感觉图片在动
 */
public class MainActivity3 extends Activity{
    private Button btn;
    private ImageView image;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.animation_layout);
        image = (ImageView) findViewById(R.id.image);
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                image.setBackgroundResource(R.drawable.anim_iconset);//加载图片xml文件
                AnimationDrawable ad=(AnimationDrawable) image.getBackground();//将图片转化成动画
                ad.start();//开启动画
            }
        });
    }
}

 停止的时候回到第一帧:

boolean b = animation.selectDrawable(0);
animation.stop();

 

posted @ 2016-05-09 20:05  ts-android  阅读(518)  评论(0编辑  收藏  举报