第七章 實現炫酷效果—映像和動畫(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()); |