您的位置:首页 > 其它

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

2015-05-31 12:45 197 查看

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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: