1. 程式人生 > >Android TransitionDrawable:過渡動畫Drawable

Android TransitionDrawable:過渡動畫Drawable

Android TransitionDrawable實現一種可以用動畫表示的Drawable。寫一個例子。

package zhangphil.app;

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //定義一個過渡drawable陣列,最後一個drawable:drawables[n-1]是最終的顯示形式
        //第一個是開始
        Drawable[] drawables=new Drawable[]{new ColorDrawable(Color.TRANSPARENT),new ColorDrawable(Color.RED)};
        TransitionDrawable td=new TransitionDrawable(drawables);

        ImageView image = (ImageView) findViewById(R.id.imageView);
        image.setImageDrawable(td);

        //交叉淡入樣式
        td.setCrossFadeEnabled(true);

        //開始執行動畫,從設定的時間內,緩慢的從TransitionDrawable構造時候的陣列第一個drawable(drawables[0])漸變成最後陣列最後一個drawable(drawables[n-1])
        //動畫執行結束後,最終顯示的是最後一個drawables[n-1]
        td.startTransition(500);
    }
}


如果要用xml實現TransitionDrawable,需要在drawable目錄下新建一個xml程式碼檔案,比如transition.xml,程式碼:

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/transparent" />
    <item android:drawable="@android:color/holo_red_dark"/>
</transition>

上層Java程式碼變成:
TransitionDrawable transition = (TransitionDrawable)getResources().getDrawable(R.drawable.transition);
        ImageView image = (ImageView) findViewById(R.id.imageView);
        image.setImageDrawable(transition);
       
        transition.setCrossFadeEnabled(true);
        transition.startTransition(500);