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()); |