【LoadingDialog】标准款待加载对话框


上图是dialog的效果图,以下为代码:


Java类:

package com.jmheart.mechanicsbao.ui.util;


import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.TextView;


import com.jmheart.mechanicsbao.R;


/**
 * 作者:chenqian on 2017/4/20 0020 13:56
 * 邮箱: [email protected]
 */


public class ProgressDialog extends AlertDialog {


    private String messageT="正在加载...";


    public ProgressDialog(Context context) {
        super(context,R.style.AppCompatAlertDialogStyle);
    }
    public ProgressDialog(Context context,int themeResId) {
        super(context,themeResId);
    }
    public ProgressDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.progressdialog);
        ((TextView) findViewById(R.id.message)) .setText(messageT);


    }
    public void setMessage(String str){
        if(!TextUtils.isEmpty(str)){
            messageT=str;
        }


    }
    public void setOutside(boolean out){
        this.setCanceledOnTouchOutside(out);
    }
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"


             android:layout_height="match_parent">
    <LinearLayout
        android:orientation="vertical"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                 android:layout_gravity="center"
                  android:gravity="center_horizontal"
                  android:background="@drawable/progressdialog"
                  android:baselineAligned="false"
                  android:paddingStart="25dp"
                  android:paddingTop="20dp"
                  android:paddingEnd="25dp"
                  android:paddingBottom="20dp">


        <ProgressBar android:id="@android:id/progress"
                     style="?android:attr/progressBarStyle"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:max="10000"
                     />


        <TextView android:id="@+id/message"
                  android:layout_width="wrap_content"
                  android:text="正在加载..."
                  android:paddingTop="5dp"
                  android:paddingLeft="5dp"
                  android:paddingRight="5dp"
                  android:textColor="#d9d9d9"
                  android:layout_height="wrap_content"
                  android:gravity="center_horizontal"/>
    </LinearLayout>
</FrameLayout>


选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
<corners android:radius="10dp"></corners>
        <solid android:color="#80000000"></solid>
    </shape>
</item>
</selector>


style代码

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>


定制款loading对话框:


效果如上,图片可以网上自己找,改一下图片资源即可

下面附上代码:

java代码:

/**
 * 得到自定义的progressDialog
 * @param context
 * @return
 */
public Dialog createLoadingDialog(Context context) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View v = inflater.inflate(R.layout.loading_dialog, null,false);// 得到加载view
    LinearLayout layout = (LinearLayout) v.findViewById(R.id.layout_dialog_view);// 加载布局
    // main.xml中的ImageView
    ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
    // 加载动画
    Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(
            context, R.anim.loading_animation);
    // 使用ImageView显示动画
    spaceshipImage.startAnimation(hyperspaceJumpAnimation);

    Dialog loadingDialog = new Dialog(context, R.style.loading_dialog);// 创建自定义样式dialog
    /*
    Display display = this.getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();*/
    //loadingDialog.setCancelable(false);// 不可以用返回键取消
    loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));// 设置布局
    return loadingDialog;
}
xml代码:

layout.loading_dialog:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_dialog_view"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="60dp"
    android:minWidth="180dp"
    android:gravity="center"
    android:padding="10dp"
    android:background="@color/colorwhite"
    >
    <ImageView
        android:id="@+id/img"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/ic_loading"
        />

</LinearLayout>

anim.loading_animation

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:fromDegrees="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="-1"
    android:repeatMode="restart"
    android:startOffset="-1"
    android:toDegrees="+360">
</rotate>

style.loading_dialog

<!-- style for 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:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>
<!-- @} -->

如果有疑问请在帖子底下留言,楼主很尽快回复的!

欢迎参观楼主的其他博客!

2018/6/6更新:增加一个菊花加载框布局:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog_loading_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="150dp"
        android:layout_height="110dp"
        android:background="@drawable/loading_bg"
        android:gravity="center"
        android:orientation="vertical"
        android:paddingBottom="10dp"
        android:paddingLeft="21dp"
        android:paddingRight="21dp"
        android:paddingTop="10dp">

        <ProgressBar
            android:id="@+id/progressBar1"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_gravity="center_horizontal"
            android:indeterminateBehavior="repeat"
            android:indeterminateDrawable="@drawable/dialog_loading"
            android:indeterminateOnly="true" />

        <TextView
            android:id="@+id/tipTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:text="加载中..."
            android:textColor="#f0f0f0"
            android:textSize="15sp" />
    </LinearLayout>

</LinearLayout>

资源图片:

drawable.dialog_loading.xml:

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@mipmap/dialog_loading_img"
    android:pivotX="50%"
    android:pivotY="50%" />

猜你喜欢

转载自blog.csdn.net/yonghuming_jesse/article/details/78020033