ProgressWheelDialogUtil【ProgressWheel Material样式进度条对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
简单封装网络请求时的加载对话框以及上传、下载文件的进度加载对话框。
效果图

代码分析
ProgressWheel : 自定义view,仿Material Design样式
ProgressWheelDialogUtil : 封装两种样式对话框【加载对话框、进度加载对话框】的显示、隐藏、赋值方法。
使用步骤
一、项目组织结构图


注意事项:
1、 导入类文件后需要change包名以及重新import R文件路径
2、 Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
二、导入步骤
将progress目录复制到项目中

将布局文件复制到项目中【注意:需要重新引用ProgressWheel类的完整路径】
progress_wheel_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 圆形进度加载对话框布局 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:wheel="http://schemas.android.com/apk/res-auto"
android:id="@+id/dialog_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center" > <!-- 自定义圆形加载进度条 -->
<com.why.project.progresswheeldialogutildemo.utils.progress.ProgressWheel
android:id="@+id/progress_wheel"
android:layout_width="@dimen/progresswheel_width"
android:layout_height="@dimen/progresswheel_height"
android:layout_gravity="center_vertical"
wheel:matProg_barColor="@color/progress_wheel_bar_color"
wheel:matProg_progressIndeterminate="true"
wheel:matProg_fillRadius="false"
/>
<!-- 圆形加载进度条右侧的文字 -->
<TextView
android:id="@+id/progress_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="@dimen/progresswheel_text_size"
android:textColor="@color/progress_wheel_text_color"
android:layout_gravity="center_vertical"
/>
</LinearLayout>
progress_wheel_upload_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 圆形进度加载对话框布局【上传视频】 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:wheel="http://schemas.android.com/apk/res-auto"
android:id="@+id/dialog_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" > <!-- 自定义圆形加载进度条 -->
<com.why.project.progresswheeldialogutildemo.utils.progress.ProgressWheel
android:id="@+id/progress_wheel"
android:layout_width="@dimen/progresswheel_width_upload"
android:layout_height="@dimen/progresswheel_width_upload"
wheel:matProg_barColor="@color/progress_wheel_bar_color"
wheel:matProg_progressIndeterminate="true"
wheel:matProg_fillRadius="false"
android:layout_centerInParent="true"
/>
<!-- 圆形加载进度条中间的文字 -->
<TextView
android:id="@+id/progress_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="@dimen/progresswheel_text_size"
android:textColor="@color/progress_wheel_text_color"
android:layout_centerInParent="true"
/>
</RelativeLayout>
在attrs.xml文件中添加以下代码
<?xml version="1.0" encoding="utf-8"?>
<resources> <!-- **************ProgressWheelDialogUtil【Materialish样式的进度条对话框】**************-->
<declare-styleable name="ProgressWheel">
<attr name="matProg_progressIndeterminate" format="boolean" />
<attr name="matProg_barColor" format="color" />
<attr name="matProg_rimColor" format="color" />
<attr name="matProg_rimWidth" format="dimension" />
<attr name="matProg_spinSpeed" format="float" />
<attr name="matProg_barSpinCycleTime" format="integer" />
<attr name="matProg_circleRadius" format="dimension" />
<attr name="matProg_fillRadius" format="boolean" />
<attr name="matProg_barWidth" format="dimension" />
<attr name="matProg_linearProgress" format="boolean" />
</declare-styleable> </resources>
在colors.xml文件中添加以下代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color> <!-- **************ProgressWheelDialogUtil【Materialish样式的进度条对话框】**************-->
<!-- 加载进度条颜色 -->
<color name="progress_wheel_bar_color">#5588FF</color>
<!-- 加载进度条文字颜色 -->
<color name="progress_wheel_text_color">#5588FF</color>
</resources>
在dimens.xml文件中添加以下代码
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen> <!-- **************ProgressWheelDialogUtil【Materialish样式的进度条对话框】**************-->
<!-- 加载进度条的宽度 -->
<dimen name="progresswheel_width">50dp</dimen>
<dimen name="progresswheel_width_upload">80dp</dimen>
<!-- 加载进度条的高度 -->
<dimen name="progresswheel_height">50dp</dimen>
<!-- 加载进度条的文字大小 -->
<dimen name="progresswheel_text_size">18sp</dimen> </resources>
在styles.xml文件中添加以下代码
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- **************ProgressWheelDialogUtil【Materialish样式的进度条对话框】**************-->
<!-- 自定义loading dialog:进度对话框 【常规的】-->
<style name="dialogutil_loading_style" parent="android:style/Theme.Dialog">
<!-- Dialog的windowFrame框为无 -->
<item name="android:windowFrame">@null</item>
<!-- 是否显示title -->
<item name="android:windowNoTitle">true</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 设置dialog的背景:#00000000透明色 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 背景变灰:整个屏幕变灰,配合setCanceledOnTouchOutside(false) -->
<item name="android:backgroundDimEnabled">false</item>
<!-- 对话框是否有遮盖 -->
<item name="android:windowContentOverlay">@null</item>
</style>
<!-- 自定义loading dialog:进度对话框 【整个屏幕变灰】-->
<style name="dialogutil_loading_style_upload" parent="android:style/Theme.Dialog">
<!-- Dialog的windowFrame框为无 -->
<item name="android:windowFrame">@null</item>
<!-- 是否显示title -->
<item name="android:windowNoTitle">true</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 设置dialog的背景:#00000000透明色 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 背景变灰:整个屏幕变灰,配合setCanceledOnTouchOutside(false) -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 对话框是否有遮盖 -->
<item name="android:windowContentOverlay">@null</item>
</style>
</resources>
至此,ProgressWheelDialogUtil集成到项目中了。
三、使用方法
在BaseActivity、BaseFragment、BaseDialogFragment基类中进一步封装
BaseActivity.java
package com.why.project.progresswheeldialogutildemo.activity; import android.app.Dialog;
import android.support.v7.app.AppCompatActivity; import com.why.project.progresswheeldialogutildemo.utils.progress.ProgressWheelDialogUtil; /**
* Created by HaiyuKing
* Used activty基类
*/ public class BaseActivity extends AppCompatActivity{ /*========================ProgressWheelDialogUtil相关====================================*/
/** 自定义进度加载框 */
public Dialog progressDialog = null; /**
* 显示进度加载对话框
* @param msg 显示内容
*/
public void showProgressDialog(String msg) {
try {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = ProgressWheelDialogUtil.createProgressWheelDialog(this, msg);
}
ProgressWheelDialogUtil.setDialogMsg(msg);
progressDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 上传、下载进度加载对话框
* @param msg 显示内容
*/
public void showProgressDialogUpload(String msg) {
try {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = ProgressWheelDialogUtil.createProgressWheelDialogUpload(this, msg);
}
ProgressWheelDialogUtil.setDialogMsg(msg);
progressDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 隐藏进度加载对话框
*/
public void dismissProgressDialog() {
try {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
BaseFragment.java
package com.why.project.progresswheeldialogutildemo.fragment; import android.app.Dialog;
import android.support.v4.app.Fragment; import com.why.project.progresswheeldialogutildemo.utils.progress.ProgressWheelDialogUtil; /**
* @Created HaiyuKing
* @Used Fragment基类
*/
public class BaseFragment extends Fragment{
private static final String TAG = "BaseFragment"; /*========================ProgressWheelDialogUtil相关====================================*/
/** 自定义进度加载框 */
public Dialog progressDialog = null; /**
* 显示进度加载对话框
* @param msg 显示内容
*/
public void showProgressDialog(String msg) {
try {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = ProgressWheelDialogUtil.createProgressWheelDialog(getActivity(), msg);
}
ProgressWheelDialogUtil.setDialogMsg(msg);
progressDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 上传、下载进度加载对话框
* @param msg 显示内容
*/
public void showProgressDialogUpload(String msg) {
try {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = ProgressWheelDialogUtil.createProgressWheelDialogUpload(getActivity(), msg);
}
ProgressWheelDialogUtil.setDialogMsg(msg);
progressDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 隐藏进度加载对话框
*/
public void dismissProgressDialog() {
try {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
} }
BaseDialogFragment.java
package com.why.project.progresswheeldialogutildemo.dialog; import android.app.Dialog;
import android.support.v4.app.DialogFragment; import com.why.project.progresswheeldialogutildemo.utils.progress.ProgressWheelDialogUtil; /**
* @Created HaiyuKing
* @Used DialogFragment基类
*/
public class BaseDialogFragment extends DialogFragment{ /*========================ProgressWheelDialogUtil相关====================================*/
/** 自定义进度加载框 */
public Dialog progressDialog = null; /**
* 显示进度加载对话框
* @param msg 显示内容
*/
public void showProgressDialog(String msg) {
try {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = ProgressWheelDialogUtil.createProgressWheelDialog(getActivity(), msg);
}
ProgressWheelDialogUtil.setDialogMsg(msg);
progressDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 上传、下载进度加载对话框
* @param msg 显示内容
*/
public void showProgressDialogUpload(String msg) {
try {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = ProgressWheelDialogUtil.createProgressWheelDialogUpload(getActivity(), msg);
}
ProgressWheelDialogUtil.setDialogMsg(msg);
progressDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 隐藏进度加载对话框
*/
public void dismissProgressDialog() {
try {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
在Activity中使用如下:
package com.why.project.progresswheeldialogutildemo.activity; import android.os.Bundle;
import android.view.View;
import android.widget.Button; import com.why.project.progresswheeldialogutildemo.R; public class MainActivity extends BaseActivity { private Button btn_showdialog;
private Button btn_showtextdialog;
private Button btn_showuploaddialog; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initViews();
initEvents();
} private void initViews() {
btn_showdialog = (Button) findViewById(R.id.btn_showdialog);
btn_showtextdialog = (Button) findViewById(R.id.btn_showtextdialog);
btn_showuploaddialog = (Button) findViewById(R.id.btn_showuploaddialog);
} private void initEvents() {
btn_showdialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showProgressDialog("");
}
}); btn_showtextdialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showProgressDialog("正在登录,请稍后");
}
}); btn_showuploaddialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showProgressDialogUpload("20%");
}
});
}
}
备注:隐藏对话框:dismissProgressDialog();
混淆配置
无
参考资料
https://github.com/pnikosis/materialish-progress
项目demo下载地址
https://github.com/haiyuKing/ProgressWheelDialogUtilDemo
ProgressWheelDialogUtil【ProgressWheel Material样式进度条对话框】的更多相关文章
- android学习笔记20——ProgressDialog进度条对话框
ProgressDialog==>进度条对话框 ProgressDialog本身就代表一个进度条对话框,程序只需要创建ProgressDialog实例,并将其显示出来就是一个进度条对话框:开发者 ...
- Android开发 ---构建对话框Builder对象,消息提示框、列表对话框、单选提示框、多选提示框、日期/时间对话框、进度条对话框、自定义对话框、投影
效果图: 1.activity_main.xml 描述: a.定义了一个消息提示框按钮 点击按钮弹出消息 b.定义了一个选择城市的输入框 点击按钮选择城市 c.定义了一个单选提示框按钮 点击按钮选择某 ...
- Android Studio常见对话框(普通对话框、单选对话框、多选对话框、进度条对话框、消息对话框、自定义对话框)
Android Studio常见对话框(普通对话框.单选对话框.多选对话框.进度条对话框.消息对话框.自定义对话框) 1.普通对话框 2.单选对话框 3.多选对话框 4.进度条对话框 5.消息对话框 ...
- AlertDialog之常见对话框(单选对话框、多选对话框、进度条对话框)
单选对话框,顾名思义就是只能选一项(setSingleChoiceItems(Items,)) public void click(View v){ //创建对话框类 AlertDialog.Buil ...
- Android——ProgressDialog 进度条对话框
public class ProgressDialogActivity extends Activity { private Button btn_large_pd, btn_horizonta ...
- 关于JFace中的进度条对话框(ProgressMonitorDialog类)
在Windows操作系统中,最常用的进度条对话框就是文件复制时的弹出框,如果想让用户愉快的使用你开发 的软件,那么在执行某个较长时间的操作时候,就应该弹出一个进度条提示框,告诉用户程序正在做什么. 做 ...
- 【转】24. android dialog ——ProgressDialog 进度条对话框详解
原文网址:http://blog.csdn.net/jamesliulyc/article/details/6375598 首先在onCreateDialog方法里创建一个ProgressDialog ...
- MaterialCalendarDialog【Material样式的日历对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Material样式的日历对话框 前提条件:Activity界面必须继承FragmentActivity或者其子类(比如AppCom ...
- 实用ExtJS教程100例-003:进度条对话框Ext.MessageBox.progress
在上一篇内容中我们介绍了三种常用的MessageBox提示框,在这篇文章中,我们将演示如何在对话框中使用进度条. 进度条对话框 我们可以使用下面的代码来在MessageBox中显示一个进度条: Ext ...
随机推荐
- 火狐浏览器插件--xpath利器
以前在做web自动化的时候,免不了要找定位啊什么的.一层层找下来太痛苦了,时间也浪费了一天写不了啥.特别是在最开始接触自动化的时候,我们系统坑爹的只支持IE.后来换公司了,在偶然情况下,得知了fire ...
- 树莓派.安装Firefox浏览器
sudo apt-get install firefox-esr 要做全屏效果的话, 可以加装插件FF Fullscreen 插件地址: https://addons.mozilla.org/en-U ...
- codeforces 671D
首先O(n2)dp很好想 f[i][j]表示i子树内的所有边都被覆盖且i~j的路径也都被覆盖的最小花费. 考虑去掉无用的状态,其实真正用到的就是每一条链. 去掉第二维,f[i]表示i子树内的边都被覆盖 ...
- BZOJ_2134_单选错位——期望DP
BZOJ_2134_单选错位——期望DP 题意: 分析:设A为Ai ∈ [1,ai+1] 的概率,B为Ai = A(imodn+1)的概率显然P(A|B) = 1,那么根据贝叶斯定理P(B) = P( ...
- 拿Proxy可以做哪些有意思的事儿
Proxy是什么 首先,我们要清楚,Proxy是什么意思,这个单词翻译过来,就是 代理.可以理解为,有一个很火的明星,开通了一个微博账号,这个账号非常活跃,回复粉丝.到处点赞之类的,但可能并不是真的由 ...
- 如何在招聘中考核.NET架构师
.NET架构师招聘不如JAVA那么顺利,可以搜索到的.NET架构师可以说是凤毛菱角.当然好的架构师都是需要长期观察和挖角才能得手,如何去招聘到合适的.NET架构师可能是摆在所有求贤者面前的难题.这里的 ...
- MIP 与 AMP 合作进展(3月7日)
"到目前为止,全网通过 MIP 校验的网页已超10亿.除了代码和缓存, MIP 还想做更多来改善用户体验移动页面." 3月7日,MIP 项目负责人在首次 AMP CONF 上发言. ...
- 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第6章 STM32H7工程模板建立(IAR8) 本章 ...
- 了解Scala反射
本篇文章主要让大家理解什么是Scala的反射, 以及反射的分类, 反射的一些术语概念和一些简单的反射例子. 什么是反射 我们知道, Scala是基于JVM的语言, Scala编译器会将Scala代码编 ...
- OSPF 基础实验
一.环境准备 1. 软件:GNS3 2. 路由:c7200 二.实验操作 实验要求: 1.掌握多区域的 OSPF 配置方法. 2.区别不同区域的路由. 3.掌握 OSPF 的路由汇总配置. 4.掌握 ...