第七章 實現炫酷效果—映像和動畫(6),第七章炫酷

來源:互聯網
上載者:User

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.