第七章 实现炫酷效果—图像和动画(6)

7.8 渐变动画—Frame Animation

FrameAnimation是按顺序播放事先做好的图像,跟播放电影类似。可以参考前面的7.3.7章节——《简单的帧动画—AnimationDrawable》。

 

经验分享:

AnimationDrawable也可以通过代码来生成AnimationDrawable对象:

AnimationDrawable mAnimationDrawable = new AnimationDrawable();

mAnimationDrawable.addFrame(Drawable frame,int duration);//来添加帧数

Drawable mDrawable = mAnimationDrawable. getFrame(int index);//来获取

 

以下提供一个java代码生成动画的例子。

// import略

public class myAnimation extends Activity implements OnClickListener {

 

    private Button mButton;

    private AnimationDrawable mAnimationDrawable;

 

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mAnimationDrawable = new AnimationDrawable();

mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.img_1), 200);

mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.img_2), 200);

mAnimationDrawable.addFrame(getResources().getDrawable(R.drawable.img_3), 200);

mButton = (Button) findViewById(R.id.button_id);

        mButton.setBackgroundDrawable(mAnimationDrawable);

        mButton.setOnClickListener(this);

        }

    public void onClick(View button) {

        switch (button.getId()) {

        case R.id.button_id: {

             // 动画是否正在运行

             if(mAnimationDrawable.isRunning()){ 

                 // 停止动画播放

                 mAnimationDrawable.stop(); 

             } else{

                 // 开始或者继续动画播放

                 mAnimationDrawable.start(); 

             }

        }

        break;

    }

}

7.9 随意组合动画效果—AnimationSet

AnimationSet是一个animation的一个子类,可以将多个animation放到一个list集合中。实际上是animation的一个集合。需要对animation的基本设置可以通过animationset来设置。如果需要对一个控件进行多种动画设置,可以采用animationset。

下面举个例子:

AnimationSet mAnimationSet = new AnimationSet(true);

mAnimationSet.setFillEnabled(true);

mAnimationSet.setInterpolator(new BounceInterpolator());

 

TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0);

ta.setDuration(2000);

mAnimationSet.addAnimation(ta);

 

TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0);

ta2.setDuration(2000);

ta2.setStartOffset(2000);

mAnimationSet.addAnimation(ta2);

// 设置动画时间

mAnimationSet.setDuration(2000); 

// 动画重复次数(-1 表示一直重复)

mAnimationSet.setRepeatCount(-1);

// 使用和前面的Animation是一样的

mButton.startAnimation(mAnimationSet);

 

经验分享:

mAnimationSet整体认为是一个动画,mAnimationSet开始的时候其中的子动画就一起开始了。如果需要按顺序的播放出来,可以设置各自的subAnimation.setStartOffset(2000);这样就可以在开始之后的2秒后再播放subAnimation。

 

7.10 加速的工具—Interpolator

android.view.animation.Interpolator定义了动画变化的速率。

在animations下定义了以下几种interpolator:

l  AccelerateDecelerateInterpolator—在动画开始与结束的地方速率改变比较慢,在中间的时候较快。

l  AccelerateInterpolator—在动画开始的时候改变较慢,然后开始加速。

l  CycleInterpolator—动画循环播放特定次数,速率改变沿着正弦曲线。

l  DecelerateInterpolator—在动画开始的时候叫慢,然后开始减速。

l  LinearInterpolator—动画以均匀速率改变。

下面提供一个如何设置animation的Interpolator例子。

在xml中的设置:

android:interpolator="@android:anim/accelerate_interpolator"

 

在Java代码中的设置:

mAnimationSet.setInterpolator(new AccelerateDecelerateInterpolator());

 

你可能感兴趣的:(第七章 实现炫酷效果—图像和动画(6))