Android的動畫機制一 ----逐幀動畫

逐幀動畫( Frame Animation)又叫Drawable Animation 是最簡單的最直觀的動畫類型,主要利用人眼的視覺暫留效應

實現原理:一系列不斷變化的圖片,按照一定的順序以及停留時間,進行不斷的切換,來實現一種動畫效果

實現方式:分爲XML資源文件方式和代碼方式

XML文件方式

這是最常用的方式,先將每一幀的圖片放入資源文件目錄中。然後在資源文件目錄中新建一個動畫XML文件,在這個文件中使用<animation-list>標籤來定義動畫幀的序列,使用<item>標籤來定義動畫的每一幀,並在其中指定幀的持續時間等屬性,事例代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    <item
        android:drawable="@drawable/waiting0"
        android:duration="150"></item>
    <item
        android:drawable="@drawable/waiting1"
        android:duration="150"></item>
    <item
        android:drawable="@drawable/waiting2"
        android:duration="150"></item>
    <item
        android:drawable="@drawable/waiting3"
        android:duration="150"></item>

</animation-list>

其中android.onshot用來控制動畫是否循環播放,爲false,表示循環播放,<item>標籤中的android.duration時候用來指定每一幀持續的時間

Activity中的使用代碼如下:

public class FrameAnimationActivity extends AppCompatActivity {

    @BindView(R.id.frameAnimation_test_iv)
    ImageView frameAnimation_test_iv;

    AnimationDrawable animationDrawable;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_frameanimetion);
        ButterKnife.bind(this);

        frameAnimation_test_iv.setImageResource(R.drawable.test_frameanimation);
        animationDrawable = (AnimationDrawable) frameAnimation_test_iv.getDrawable();
    }

    @Override
    protected void onResume() {
        super.onResume();
        animationDrawable.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        animationDrawable.stop();
    }
}

代碼方式

代碼中定義逐幀動畫也比較簡單,但是不常用代碼如下:

 animationDrawable = new AnimationDrawable();
        for(int i=0;i<4;i++){
            int id = getResources().getIdentifier("waiting"+i,"drawable",getPackageName());
            Drawable drawable = getResources().getDrawable(id);
            animationDrawable.addFrame(drawable,150);
        }
        animationDrawable.setOneShot(false);

        frameAnimation_test_iv.setImageResource(R.drawable.test_frameanimation);
        animationDrawable = (AnimationDrawable) frameAnimation_test_iv.getDrawable();

開始動畫和結束動畫的方法和上面相同


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章