1. 程式人生 > >android 動畫 幀動畫 FrameAnimation

android 動畫 幀動畫 FrameAnimation

幀動畫——FrameAnimation

將一系列圖片有序播放,形成動畫的效果。其本質是一個Drawable,是一系列圖片的集合,本身可以當做一個圖片一樣使用

1,在Drawable資料夾下,建立animation-list為根節點的資原始檔(drawable_anim)

<animation-listandroid:oneshot="false">
    <item
android:drawable="@mipmap/progress_1"android:duration="50"/>
    <item
android:drawable="@mipmap/progress_2"

android:duration="50"/>
    <item
android:drawable="@mipmap/progress_3"android:duration="50"/>
    <item
android:drawable="@mipmap/progress_4"android:duration="50"/>
</animation-list>

oneshot:是否只播放一次 

drawable:一幀引用的圖片

duration:一幀播放的時間

2,imageview中設定背景(R.layout.anim_drawable_dialog_layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <ImageView
        android:id="@+id/refreshing_drawable_img"
        android:layout_width="wrap_content"
        
android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:scaleType="fitCenter"         android:src="@drawable/drawable_anim" /> </RelativeLayout>

3,繼承AlertDialog,設定樣式

獲得image的animationDrawable(progressImg.getDrawable())

如果image設定的是background則(progressImg .getBackground())

animationDrawable.start,開始動畫

public class AnimDrawableAlertDialog extends AlertDialog {


    private ImageView progressImg;
    //幀動畫
    private AnimationDrawable animation;

    public AnimDrawableAlertDialog(Context context) {
        super(context, R.style.MyDialog);
    }

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

        //點選imageview外側區域,動畫不會消失
        setCanceledOnTouchOutside(false);

        progressImg = (ImageView) findViewById(R.id.refreshing_drawable_img);
        //載入動畫資源
        animation = (AnimationDrawable) progressImg.getDrawable();
    }

    /**
     * AlertDialogonStart() 生命週期裡面執行開始動畫
     */
    @Override
    protected void onStart() {
        super.onStart();
        animation.start();
    }

    /**
     * AlertDialogonStop()生命週期裡面執行停止動畫
     */
    @Override
    protected void onStop() {
        super.onStop();
        animation.stop();
    }

}

4,設定dialog樣式(R.style.MyDialog

<resources>

    <!-- 自定義dialog背景全透明無邊框 -->
    <style name="MyDialog" parent="android:style/Theme.Dialog">

        <!-- 背景顏色及和透明程度 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 是否去除標題 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否去除邊框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 是否浮現在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否模糊 -->
        <item name="android:backgroundDimEnabled">false</item>
    </style>

</resources>

5,activity中呼叫對話方塊

AnimDrawableAlertDialog progressDrawableAlertDialog = new AnimDrawableAlertDialog(this);
progressDrawableAlertDialog.show();

6,效果