Android进步之路一:显示“正在加载,请稍候.......”进度对话框示例代码以及具体细节讲解

Android自定义圆形加载进度条弹窗实现详解 Android开发中,自定义圆形加载进度条的核心在于对CanvasPaint的精准控制。通过继承View类并重写方法,开发者可在指定坐标系中绘制圆环、弧形等图形元素。系统以逆时针为正方向,需结合三角函数计算起始角度与扫过角度,利用绘制动态进度弧。绘制前需配置Paint的样式(如STROKE模式)、线宽()及抗锯齿(),确保视觉质量。@Override// 绘制圆弧其中,rectF定义了外接矩形范围,决定了圆形的边界。通过不断更新sweepAngle。 阅读详情
import com.farsunset.ichat.example.R;

import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;

public class DateReportActivity extends Activity {

  private ProgressDialog progressDialog;
  
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_date_report);

    showProgressDialog("提示", "正在加载......");
  }

  /*
   * 提示加载
   */
  public void showProgressDialog(String title, String message) {
    if (progressDialog == null) {

      progressDialog = ProgressDialog.show(DateReportActivity.this, title,
          message, true, false);
    } else if (progressDialog.isShowing()) {
      progressDialog.setTitle(title);
      progressDialog.setMessage(message);
    }

    progressDialog.show();

  }

  /*
   * 隐藏提示加载
   */
  public void hideProgressDialog() {

    if (progressDialog != null && progressDialog.isShowing()) {
      progressDialog.dismiss();
    }

  }

}

ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。

ProgressDialog的创建方式有两种,一种是new Dialog ,一种是调用Dialog的静态方法Dialog.show()。

  1. // 方式一:new Dialog  
  2.     final ProgressDialog dialog = new ProgressDialog(this);  
  3.     dialog.show();  

  1. // 方式二:使用静态方式创建并显示,这种进度条只能是圆形条,设置title和Message提示内容  
  2.     ProgressDialog dialog2 = ProgressDialog.show(this"提示""正在登陆中");  

  1. // 方式三 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean indeterminate设置是否是不明确的状态  
  2.     ProgressDialog dialog3 = ProgressDialog  
  3.             .show(this"提示""正在登陆中"false);  

  1. // 方式四 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数boolean cancelable 设置是否进度条是可以取消的  
  2.     ProgressDialog dialog4 = ProgressDialog.show(this"提示""正在登陆中",  
  3.             falsetrue);  

  1. // 方式五 使用静态方式创建并显示,这种进度条只能是圆形条,这里最后一个参数 DialogInterface.OnCancelListener  
  2.     // cancelListener用于监听进度条被取消  
  3.     ProgressDialog dialog5 = ProgressDialog.show(this"提示""正在登陆中"true,  
  4.             true, cancelListener);  
关于方式五的监听:

  1. private OnCancelListener cancelListener = new OnCancelListener() {  
  2.   
  3.     @Override  
  4.     public void onCancel(DialogInterface dialog) {  
  5.         // TODO Auto-generated method stub  
  6.         Toast.makeText(MainActivity.this"进度条被取消", Toast.LENGTH_LONG)  
  7.                 .show();  
  8.   
  9.     }  
  10. };  

ProgressDialog的样式有两种,一种是圆形不明确状态,一种是水平进度条状态

  1. final ProgressDialog dialog = new ProgressDialog(this);  
  2.         dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 设置进度条的形式为圆形转动的进度条  
  3.         dialog.setCancelable(true);// 设置是否可以通过点击Back键取消  
  4.         dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条  
  5.         dialog.setIcon(R.drawable.ic_launcher);//  
  6.         // 设置提示的title的图标,默认是没有的,如果没有设置title的话只设置Icon是不会显示图标的  
  7.         dialog.setTitle("提示");  
  8.         // dismiss监听  
  9.         dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {  
  10.   
  11.             @Override  
  12.             public void onDismiss(DialogInterface dialog) {  
  13.                 // TODO Auto-generated method stub  
  14.   
  15.             }  
  16.         });  
  17.         // 监听Key事件被传递给dialog  
  18.         dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {  
  19.   
  20.             @Override  
  21.             public boolean onKey(DialogInterface dialog, int keyCode,  
  22.                     KeyEvent event) {  
  23.                 // TODO Auto-generated method stub  
  24.                 return false;  
  25.             }  
  26.         });  
  27.         // 监听cancel事件  
  28.         dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {  
  29.   
  30.             @Override  
  31.             public void onCancel(DialogInterface dialog) {  
  32.                 // TODO Auto-generated method stub  
  33.   
  34.             }  
  35.         });  
  36.         //设置可点击的按钮,最多有三个(默认情况下)  
  37.         dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",  
  38.                 new DialogInterface.OnClickListener() {  
  39.   
  40.                     @Override  
  41.                     public void onClick(DialogInterface dialog, int which) {  
  42.                         // TODO Auto-generated method stub  
  43.   
  44.                     }  
  45.                 });  
  46.         dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",  
  47.                 new DialogInterface.OnClickListener() {  
  48.   
  49.                     @Override  
  50.                     public void onClick(DialogInterface dialog, int which) {  
  51.                         // TODO Auto-generated method stub  
  52.   
  53.                     }  
  54.                 });  
  55.         dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "中立",  
  56.                 new DialogInterface.OnClickListener() {  
  57.   
  58.                     @Override  
  59.                     public void onClick(DialogInterface dialog, int which) {  
  60.                         // TODO Auto-generated method stub  
  61.   
  62.                     }  
  63.                 });  
  64.         dialog.setMessage("这是一个圆形进度条");  
  65.         dialog.show();  
  66.         new Thread(new Runnable() {  
  67.   
  68.             @Override  
  69.             public void run() {  
  70.                 // TODO Auto-generated method stub  
  71.                 try {  
  72.                     Thread.sleep(5000);  
  73.                     // cancel和dismiss方法本质都是一样的,都是从屏幕中删除Dialog,唯一的区别是  
  74.                     // 调用cancel方法会回调DialogInterface.OnCancelListener如果注册的话,dismiss方法不会回掉  
  75.                     dialog.cancel();  
  76.                     // dialog.dismiss();  
  77.                 } catch (InterruptedException e) {  
  78.                     // TODO Auto-generated catch block  
  79.                     e.printStackTrace();  
  80.                 }  
  81.   
  82.             }  
  83.         }).start();  

其中通过Thread.sleep(5000)模拟后台操作。

cancel和dismiss方法本质都是一样的,都是从屏幕中删除Dialog,唯一的区别是:调用cancel方法会回调DialogInterface.OnCancelListener如果注册的话,dismiss方法不会回调。

第二种方式:水平进度条

  1. // 进度条还有二级进度条的那种形式,这里就不演示了  
  2.     final ProgressDialog dialog = new ProgressDialog(this);  
  3.     dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置水平进度条  
  4.     dialog.setCancelable(true);// 设置是否可以通过点击Back键取消  
  5.     dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条  
  6.     dialog.setIcon(R.drawable.ic_launcher);// 设置提示的title的图标,默认是没有的  
  7.     dialog.setTitle("提示");  
  8.     dialog.setMax(100);  
  9.     dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定",  
  10.             new DialogInterface.OnClickListener() {  
  11.   
  12.                 @Override  
  13.                 public void onClick(DialogInterface dialog, int which) {  
  14.                     // TODO Auto-generated method stub  
  15.   
  16.                 }  
  17.             });  
  18.     dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",  
  19.             new DialogInterface.OnClickListener() {  
  20.   
  21.                 @Override  
  22.                 public void onClick(DialogInterface dialog, int which) {  
  23.                     // TODO Auto-generated method stub  
  24.   
  25.                 }  
  26.             });  
  27.     dialog.setButton(DialogInterface.BUTTON_NEUTRAL, "中立",  
  28.             new DialogInterface.OnClickListener() {  
  29.   
  30.                 @Override  
  31.                 public void onClick(DialogInterface dialog, int which) {  
  32.                     // TODO Auto-generated method stub  
  33.   
  34.                 }  
  35.             });  
  36.     dialog.setMessage("这是一个水平进度条");  
  37.     dialog.show();  
  38.     new Thread(new Runnable() {  
  39.   
  40.         @Override  
  41.         public void run() {  
  42.             // TODO Auto-generated method stub  
  43.             int i = 0;  
  44.             while (i < 100) {  
  45.                 try {  
  46.                     Thread.sleep(200);  
  47.                     // 更新进度条的进度,可以在子线程中更新进度条进度  
  48.                     dialog.incrementProgressBy(1);  
  49.                     // dialog.incrementSecondaryProgressBy(10)//二级进度条更新方式  
  50.                     i++;  
  51.   
  52.                 } catch (Exception e) {  
  53.                     // TODO: handle exception  
  54.                 }  
  55.             }  
  56.             // 在进度条走完时删除Dialog  
  57.             dialog.dismiss();  
  58.   
  59.         }  
  60.     }).start();  

Android自定义ProgressBar实现文字滚动进度效果 摆在面前的第个问题:是要从零开始造轮子,还是站在巨人肩膀上?经过多个项目的验证,我的答案很明确——继承ProgressBar是最优解。这样做有三大好处:自动继承完整的进度管理机制无需重新实现触摸事件处理完美兼容现有样式体系别小看这三,它们能帮你省下至少三天的调试时间!来看具体实现:注意到第三参数传入了吗?这个小技巧确保了即使你在XML里只写,也能获得水平进度条的完整行为。是不是很贴心? 阅读详情

相关推荐

Android酷炫加载动画源码库实战解析

Drawable是 Android 图形系统中最为基础且灵活的可视化组件,广泛用于 View 的背景、图标展示及自定义绘制。它是个抽象类,提供了draw()setAlpha()等核心方法,子类如分别支持图片渲染、矢量形状图层叠加。@Override// 使用Paint在Canvas上绘制圆形通过继承Drawable并重写draw()方法,开发者可完全掌控绘制逻辑。结合Paint的样式配置与Canvas的变换操作(平移、旋转),可实现复杂视觉效果。此外,调用。

weixin_31715353的博客 634

Android实现加载时提示“正在加载稍后”的方法

前言 这篇文章主要介绍的是,如何实现击按钮,弹出“正在加载数据,稍候…”对话框加载完了之后,对话框自动消失呢? 其实也是很简单的看下面代码: import com.farsunset.ichat.example.R; import android.os.Bundle; import android.app.Activity; import android.app.ProgressDialog; public class DateReportActivity extends Activity { private ProgressDialog progressDialog; @Over

自定义动画进度条教程与案例分析

在用户界面(UI)设计中,动画是种重要的元素,它可以引导用户的注意力、增加视觉吸引力并改善用户体验。合适的动画可以提升交互的流畅感,使用户在等待加载或者进行操作时感觉到时间的流逝。动画使得操作界面从静态的展示转变为动态的故事讲述,有效地传递了应用的操作逻辑,增强了用户的参与感。例如,在进度条动画中,通过平滑的过渡效果可以让用户感受到数据加载进度,减少用户的焦虑感。进度条是用户等待过程中的个反馈机制,良好的动画效果可以让等待变得更愉快,甚至让用户对整个应用的体验留下深刻印象。

weixin_26805451的博客 758

ProgressDialog使用总结

本文转载于:http://blog.csdn.net/caesardadi/article/details/11982721 ProgressDialog的使用  ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。 ProgressDialog的创建方式有两种,种是new

阿良的专栏 1153

ProgressDialog 独立组件

ProgressDialog   [功能] 鉴于很多人对ProgressDialog 的使用不是太熟悉 导致在此浪费了太多时间 而不喜欢使用 更加剧了这个问题   所以决定写这篇:ProgressHelper 包含了 创建 显示 并关闭 ProgressDialog     [代码 步骤] 1. 创建 ProgressHelper  的构造函数 并传入ProgressDial...

我的实验室 贡献我们智慧于网络 184

progressdialog进度框_进度对话框 ProgressDialog 用法总结

ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialogpublic class ProgressDialog extends AlertDialogProgressDialog的创建方式有两种,种是new ProgressDialog,种是调用ProgressDialog的静态方法show()创建并显示,这种进度条只能是圆形条。imageProgr...

weixin_39585070的博客 776

Android实现加载等待展示--进度

Android实现加载等待展示--进度

oAiYinSiTan12的博客 1694

ProgressDialog 用法 注意(

pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMax(100); // pd.setProgress(20); //不会正确显示 pd.show(); //pd 必须在show之后再设置,如果在之前设置,就会无效 pd.setPro...

ruilin521314 219

MagicProgressWidget完全指南:打造Android炫酷渐变进度条与圆形进度指示器

MagicProgressWidget是款功能强大的Android进度组件库,提供了MagicProgressCircle圆形进度指示器MagicProgressBar线性进度条两种核心控件,帮助开发者轻松实现带有平滑渐变效果的进度展示。无论是下载进度加载状态还是数据统计,这款组件都能为你的应用界面增添专业感视觉吸引力。 ## 为什么选择MagicProgressWidget? 在An

gitblog_00409的博客 946

ProgressLoadingView带进度加载动画

提笔   难以提笔,不知如何编写才能将此控件描述清晰。思考良久,觉得与其详细扣代码细节,还不如讲解下实现原理、架构设计的逐步形成以及整个心路历程。当然想要扣代码细节戳这里Gayhub仓库。 简述   这是款带有进度加载动画,可以定制不同的style。注:阅读本文需要有定自定义View基础。 效果图 ​   此控件目前提供了两种样式,分别于效果图中左侧右侧,颜色背景色可...

imurluck的博客 1462

Android缓冲进度条或加载进度

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术整理成了视频PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示部分。当程序员容易,当个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作能力提升中甩开同龄人。

2401_83703866的博客 459

ListView实现分页加载(三)实现分页加载

在上篇中,我们实现了底部布局(即带上了进度条)。没有读过的朋友可以击下面的链接: http://www.cnblogs.com/fuly550871915/p/4866966.html 但是进度条的消失,以及数据的加载我们都没有实现,那么在本节中,我们来完成分页加载具体的效果我就不贴图了,就是第篇效果展示的那些效果。 代码还是 有些难度...

bai8005的博客 173

Cocos Creator资源加载进度条:异步加载与实时反馈的完整实现方案

在游戏开发中,资源加载是影响用户体验的关键环节。其核心原理是通过异步加载机制,避免阻塞主线程,确保游戏运行的流畅性。这项技术的价值在于显著提升应用的响应速度用户感知,尤其在游戏启动场景切换时,能有效减少用户等待的焦虑感。典型的应用场景包括游戏预加载、动态内容加载以及需要平滑过渡的复杂应用界面。本文聚焦于Cocos Creator引擎,深入探讨如何构建个专业的加载管理器,实现**异步加载**与**实时状态反馈**的深度结合,通过队列化任务管理多维度进度展示,打造稳定流畅的加载体验。

weixin_30591551的博客 313

收藏 | Android开发从入门到精通系列书籍资料最全攻略!!!(最新更新)

很多人会私信给我提问,问安卓的学习路线是什么,因为之前没有写过系统的路线图,于是近期花了些时间,把这块的知识,做成个体系分享给大家,也算是自己在安卓这边做的份贡献。 关于安卓如何来学习,安卓入门怎么去学,这讲主要分享的是安卓APP开发的个学习路线,原创不易,如果喜欢,分享支持明哥! 我们来进行今天的分享,整个的安卓学习路线,按着这个路线去学习,可以保证能够快速的上手,掌握安卓开发。 整理不易,记得先赞支持下!! 整理不易,记得先赞支持下!! 整理不易,记得先赞支持下!! 第.

程序员入门进阶 6262

HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等(1)

其实Android开发的知识就那么多,面试问来问去还是那么东西。所以面试没有其他的诀窍,只看你对这些知识准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术整理成了视频PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示部分。【Android思维脑图(技能树)】知识不体系?

2401_84149381的博客 964

Android缓冲进度条或加载进度条(1)

Android 详细知识思维脑图(技能树)】我个人是做Android开发,已经有十来年了,目前在某创业公司任职CTO兼系统架构师。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不定能找到合适的),所以努力让自己成为高级工程师才是最重要的。这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。

2401_84132176的博客 904

突破Android刷新体验:SmartRefreshLayout与进度动画深度集成指南

你是否还在为Android应用的下拉刷新效果单调、用户体验不佳而烦恼?是否想让你的应用拥有如淘宝二楼般炫酷的二级刷新,或是像Dropbox那样流畅的进度动画?本文将带你全面掌握SmartRefreshLayout框架,通过简单几步即可实现专业级的刷新交互效果,让你的应用在细节处脱颖而出。 ## 为什么选择SmartRefreshLayout? SmartRefreshLayout是"智能"...

gitblog_00829的博客 1176

ExoPlayer加载状态UI:设计不同加载阶段的UI

在视频播放应用中,用户体验往往取决于细节处理,而加载状态UI正是其中最关键的环。你是否曾经遇到过这样的情况:击播放按钮后,屏幕片漆黑,既没有进度指示也没有状态提示,让你无从判断是网络问题、播放器故障还是内容本身不可用?这种不确定性不仅会让用户感到困惑沮丧,更可能导致用户流失。 ExoPlayer作为Android平台上功能强大的媒体播放器,提供了丰富的加载状态管理机制,但默认的加载UI往...

gitblog_00425的博客 1071
上一篇: app包中的fragment和V4包中的fragment使用的区别
下一篇: Android进步之路二:进度对话框的示例代码以及详解
fckdenny
博客等级 码龄12年 4粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值