android_自定義Loading框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class CustomLoadingDialog extends Dialog {
 
    @ViewInject(R.id.custom_loading_dialog_indicator)
    private ImageView indicatorIv;
    @ViewInject(R.id.custom_loading_dialog_message)
    private TextView messageTv;
 
    private CustomLoadingDialog(Context context, int theme) {
        super(context, theme);
    }
 
    public static CustomLoadingDialog createLoading(Context context) {
        CustomLoadingDialog dialog = new CustomLoadingDialog(context, R.style.CustomDialog);
        View content = LayoutInflater.from(context).inflate(
                R.layout.custom_loading_dialog, null);
        ViewUtils.inject(dialog, content);
        dialog.addContentView(content, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        return dialog;
    }
 
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        if (hasFocus) {
            indicatorIv.startAnimation(AnimationUtils.loadAnimation(
                    getContext(), R.anim.custom_loading_dialog));
        }
    }
 
    public void setMessage(String message) {
        if (!TextUtils.isEmpty(message)) {
            messageTv.setVisibility(View.VISIBLE);
            messageTv.setText(message);
        else {
            messageTv.setVisibility(View.GONE);
        }
    }
 
}

資源文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 邊框 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否浮現在activity之上 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 無標題 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 半透明 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 模糊 -->
    </style>
     
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/CustomDialogBackground"
    android:minWidth="240dp"
    android:padding="@dimen/Xlarge"
    >
 
    <ImageView
        android:id="@+id/custom_loading_dialog_indicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/loading_indicator"/>
 
    <TextView
        android:id="@+id/custom_loading_dialog_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:layout_marginTop="@dimen/medium"
        android:singleLine="true"
        android:maxWidth="200dp"
        android:textColor="@android:color/black"
        android:textSize="@dimen/text_noraml"/>
</LinearLayout>
 
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
 
    <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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void showLoadingDialog() {
        if (loadingDialog == null) {
            loadingDialog = CustomLoadingDialog.createLoading(this);
        }
        loadingDialog.setMessage(getResources().getString(R.string.loading_message_default));
        loadingDialog.show();
    }
 
    public void showLoadingDialog(String message) {
        if (loadingDialog == null) {
            loadingDialog = CustomLoadingDialog.createLoading(this);
        }
        if (!TextUtils.isEmpty(message)) {
            loadingDialog.setMessage(message);
        else {
            loadingDialog.setMessage(getResources().getString(R.string.loading_message_default));
        }
        loadingDialog.show();
    }
 
    public void hideLoadingDialog() {
        if (loadingDialog != null && loadingDialog.isShowing()) {
            loadingDialog.dismiss();
        }
    }
 
    public void setLoadingDialogCancel(boolean canCancel) {
        loadingDialog.setCancelable(canCancel);
    }
發佈了33 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章