android 動畫 幀動畫 FrameAnimation
阿新 • • 發佈:2019-01-29
幀動畫——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"
<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(); } /** * 在AlertDialog的 onStart() 生命週期裡面執行開始動畫 */ @Override protected void onStart() { super.onStart(); animation.start(); } /** * 在AlertDialog的onStop()生命週期裡面執行停止動畫 */ @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();