Android自定義類似ProgressDialog效果載入動畫
阿新 • • 發佈:2019-02-20
方法如下:
1.首先準備兩張自己要定義成哪樣子的效果的圖片和背景圖片(也可以不要背景)。
如我要的效果:
2.定義loading_dialog.xml佈局檔案(這裡你也可以按自己的佈局效果定義,關鍵是要有個imageView):
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/dialog_view"
-
android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:minHeight="60dp"
- android:minWidth="180dp"
- android:gravity="center"
- android:padding="10dp"
- android:background="@drawable/loading_bg">
- <ImageView
- android:id="@+id/img"
-
android:layout_width
- android:layout_height="wrap_content"
- android:src="@drawable/publicloading"
- />
- <TextView
- android:id="@+id/tipTextView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
-
android:layout_marginLeft="10dp"
- android:text="資料載入中……"/>
- </LinearLayout>
3.定義一個loadingDialog中imageView轉動的動畫:loading_animation.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <setandroid: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>
4.定義dialog的style.
- <!-- 自定義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/loading_bg</item>
- <item name="android:windowIsFloating">true</item>
- <item name="android:windowContentOverlay">@null</item>
- </style>
5.寫點建立Dialog的程式碼,你可以自己封裝成一個方法。
- /**
- * 得到自定義的progressDialog
- * @param context
- * @param msg
- * @return
- */
- publicstatic Dialog createLoadingDialog(Context context, String msg) {
- LayoutInflater inflater = LayoutInflater.from(context);
- View v = inflater.inflate(R.layout.loading_dialog, null);// 得到載入view
- LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 載入佈局
- // main.xml中的ImageView
- ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
- TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);// 提示文字
- // 載入動畫
- Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(
- context, R.anim.load_animation);
- // 使用ImageView顯示動畫
- spaceshipImage.startAnimation(hyperspaceJumpAnimation);
- tipTextView.setText(msg);// 設定載入資訊
- Dialog loadingDialog = new Dialog(context, R.style.loading_dialog);// 建立自定義樣式dialog
- loadingDialog.setCancelable(false);// 不可以用“返回鍵”取消
- loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.FILL_PARENT,
- LinearLayout.LayoutParams.FILL_PARENT));// 設定佈局
- return loadingDialog;
- }
最後來張整體的效果圖: