在平时的Android开发中,我们难免会遇到像登陆.注册.获取数据这样的操作,而用的的网络状况不同,导致操作需要等待一定的时间,那么为了友好期间,我们需要给用户提供一个在操作完之后的一个友好的等待界面,而Android系统自带的等待对话框比较难看,而且根据项目的不同,产品经理也会有不同的要求,或者客户有特殊的要求。所以,需要我们去自己自定义一个加载等待对话框。
下面我们来做一个给中石油做的一个App中的加载等待对话框。
1.先看效果图
2.准备资源文件
- 等待对话框的背景图片->loading_bg.9.png
- 等待对话框的旋转动画图片->loading.png
3.进度条动画旋转实现
-
custom_progress_draw.xml
<?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@mipmap/loading" android:pivotX="50%" android:pivotY="50%" />
4.自定义等待对话框的布局文件
- loading.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <RelativeLayout android:layout_width="150dp" android:layout_height="150dp" android:layout_centerInParent="true" android:gravity="center" android:background="@mipmap/loading_bg"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center|bottom" android:orientation="vertical"> <ProgressBar style="@android:style/Widget.ProgressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateDrawable="@drawable/custom_progress_draw" /> <TextView android:layout_marginBottom="20dp" android:id="@+id/tv_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在登录" android:layout_marginTop="20dp" android:textColor="#fff" /> </LinearLayout> </RelativeLayout> </RelativeLayout>
5.自定义对话框代码:
package cn.bluemobi.dylan;import android.app.Dialog;import android.content.Context;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.widget.TextView; /** * 自定义加载进度对话框 * Created by Dylan on 2016-10-28. */ public class LoadingDialog extends Dialog { private TextView tv_text; public LoadingDialog(Context context) { super(context); /**设置对话框背景透明*/ getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); setContentView(R.layout.loading); tv_text = (TextView) findViewById(R.id.tv_text); setCanceledOnTouchOutside(false); } /** * 为加载进度个对话框设置不同的提示消息 * * @param message 给用户展示的提示信息 * @return build模式设计,可以链式调用 */ public LoadingDialog setMessage(String message) { tv_text.setText(message); return this; } }
6.用法:一句代码搞定
-
MainActivity中
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new LoadingDialog(this).setMessage("正在加载...").show(); }
7.再次看效果
8. GitHub地址 : https://github.com/linglongxin24/LoadingDialog