自定义ProgressDialog的实现

要实现一个等待的圆形进度条效果,转圈的效果。可以有两种方式,第一种用progressbar,第二种用progressdialog,而progressbar在运行时用户是可以操作其他控件的。在不想让用户操作其他控件只能等待的情况下,我们用progressdialog来实现此功能。
又由于自带的progressdialog比较丑,我们想最终实现屏幕上只有一个圈和一条文字的效果如图:
自定义ProgressDialog的实现_第1张图片

下面来看代码实现:
自定义dialog并继承Dialog,创建一个dialog类方便使用

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import cn.tcb.destmonitoronline.R;

/**
 * 自定义progressdialog的类
 * Created by renchongbin on 2016/6/6.
 */
public class CustomProgressDialog extends Dialog{
        private Context context = null;
        private static CustomProgressDialog customProgressDialog = null;

        public CustomProgressDialog(Context context){
            super(context);
            this.context = context;
        }

        public CustomProgressDialog(Context context, int theme) {
            super(context, theme);
        }
        //创建dialog
        public static CustomProgressDialog createDialog(Context context){
            customProgressDialog = new CustomProgressDialog(context,R.style.CustomProgressDialog);//应用自定义style
            customProgressDialog.setContentView(R.layout.progress_dialog);//加载自定义布局
            customProgressDialog.getWindow().getAttributes().gravity = Gravity.CENTER;//居中
          //  customProgressDialog.setCancelable(false);//设置能否取消,默认是True,也就是点击其他地方就会取消这个dialog的显示

            return customProgressDialog;
        }
}

下面是引用的自定义的style:

 
    

然后是要加载的自定义布局:progress_dialog.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
     android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Large"/>
    <TextView
        android:id="@+id/id_tv_loadingmsg"
        android:text="@string/wait_a_minute"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:layout_marginTop="5dp"
        />

LinearLayout>

此布局我说说明一下,由于我没有自己的等待图片,所以我就引用了系统自带的progressbar来作为要显示的图片,此效果感觉还不错。就是中间那个旋转的大圈。

自定义的progressdialog已经完成,那么下面就是使用了,在需要的地方使用他。
比如我是在登录的时候向服务器发送数据的时候弹出这个progressdialog在接受到数据之后让这个dialog消失。下面是代码:

//我的登录activity
public class LoginActivity extends AppCompatActivity {

    private IntentFilter mLoginResultIntentFilter;
    private LoginResultReceiver mLoginResultReceiver;
    private EditText mEditUser;
    private EditText mEditPw;
    private CheckBox mSavePassword;
    private CustomProgressDialog progressDialog = null;//声明自定义弹出框

在需要的时候弹出进度框

   progressDialog = CustomProgressDialog.createDialog(LoginActivity.this);
   progressDialog.show();

在任务完成之后关闭对话框

 progressDialog.cancel();

你可能感兴趣的:(Android)