android 自定義載入動畫控制元件
阿新 • • 發佈:2021-06-29
一、效果
二、建立資源
1、建立彈窗的背景
shape_bg_5_blue.xml顏色可自行調整
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="5dp"/> <solid android:color="#FFFFFF"/> </shape>
2、新增載入圖片(阿里圖示庫)
3、建立一個彈窗的樣式
<!--自定義loading dialog --> <style name="loading_dialog" parent="android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/shape_bg_5_blue</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
4、建立一個動畫檔案
<?xml version="1.0" encoding="utf-8"?> <set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="+360" android:duration="1500" android:startOffset="-1" android:repeatMode="restart" android:repeatCount="-1"/> </set>
三、控制元件設計
1、佈局檔案
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dialog_view" android:orientation="vertical" android:layout_width="120dp" android:layout_height="120dp" android:gravity="center" android:padding="10dp"> <ImageView android:id="@+id/iv_loading" android:layout_width="40dp" android:layout_height="40dp" android:src="@mipmap/icon_loading_5" /> <TextView android:id="@+id/tv_loading_tx" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:maxLines="1" android:text="玩命載入中..." android:textColor="#FFF" android:textSize="14sp" /> </LinearLayout>
2、邏輯程式碼
package com.me.myqmui; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.view.Gravity; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.TextView; /** * 自定義彈窗 */ public class CustomDialog extends Dialog { TextView tvLoadingTx; ImageView ivLoading; public CustomDialog(Context context) { this(context, R.style.loading_dialog, "玩命載入中..."); } public CustomDialog(Context context, String string) { this(context, R.style.loading_dialog, string); } protected CustomDialog(Context context, int theme, String string) { super(context, theme); setCanceledOnTouchOutside(true);//點選其他區域時 true 關閉彈窗 false 不關閉彈窗 setContentView(R.layout.loading_dialog);//載入佈局 tvLoadingTx = findViewById(R.id.tv_loading_tx); tvLoadingTx.setTextSize(20); tvLoadingTx.setText(string); ivLoading = findViewById(R.id.iv_loading); // 載入動畫 Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation( context, R.anim.loading_animation); // 使用ImageView顯示動畫 ivLoading.startAnimation(hyperspaceJumpAnimation); getWindow().getAttributes().gravity = Gravity.CENTER;//居中顯示 getWindow().getAttributes().dimAmount = 0.5f;//背景透明度 取值範圍 0 ~ 1 } //關閉彈窗 @Override public void dismiss() { super.dismiss(); } }