Android ProgressBar进度条和ProgressDialog进度框的展示DEMO


Posted in PHP onJune 19, 2013

在做手机开发时,经常碰到一些比较耗时的操作,这个时候进度条就开始派上用场了。
这个demo展示了ProgressBar进度条和ProgressDialog进度框。
一、ProgressDialog进度框,效果如图所示:
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
代码如下:

//进度对话框按钮监听
     class ProssButtonListener implements OnClickListener {
         @Override
         public void onClick(View v) {
             myDialog = ProgressDialog.show(ProgressbarDemo.this, "进度条标题",
                     "进度条内容", true);             new Thread() {
                 public void run() {
                     try {
                         /* 在这里写上要背景运行的程序片段 */
                         /* 为了明显看见效果,以暂停3秒作为示范 */
                         sleep(3000);
                     } catch (Exception e) {
                         e.printStackTrace();
                     } finally {
                         // 卸载所创建的myDialog对象。
                         myDialog.dismiss();
                     }
                 }
             }.start(); /* 开始运行运行线程 */
         }
     }

二、进度条对话框,这里用两种情况来动态显示进度条刻度
1、handle方法
效果图如下:
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
代码如下:
//进度条handle按钮监听
     class ProssBarHandleButtonListener implements OnClickListener {
         @Override
         public void onClick(View v) {
             progressBarHandle.setVisibility(View.VISIBLE);
             myProssBarhandleText.setVisibility(View.VISIBLE);
             progressBarHandle.setMax(1000); 
             new Thread() { 
                 public void run() {
                     for(int i=0;i<=1000;){
                     try {
                         /* 在这里写上运行的进度条 */
                         Message msg = new Message();
                         msg.what = 1;
                         msg.getData().putInt("size", i);
                         handler.sendMessage(msg);//handle发送消息
                         /* 为了明显看见效果,以暂停1秒作为示范 */
                         sleep(100);
                         i+=10;
                     } catch (Exception e) {
                         handler.obtainMessage(-1).sendToTarget();
                         e.printStackTrace();
                     }  
                 }
                 }
             }.start(); /* 开始运行运行线程 */
         }
     }     //handle接收消息
      private Handler handler = new Handler(){
             @Override
             public void handleMessage(Message msg) {            
                 switch (msg.what) {
                 case 1:                
                     progressBarHandle.setProgress(msg.getData().getInt("size"));
                     float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax();
                     int result = (int)(num*100);
                     System.out.println("progressBarHandle.getProgress()======="+progressBarHandle.getProgress());
                     myProssBarhandleText.setText(result+ "%");
                     if(progressBarHandle.getProgress()==progressBarHandle.getMax()){
                         Toast.makeText(ProgressbarDemo.this, "下载成功", 1).show();
                         progressBarHandle.setVisibility(View.GONE);
                         myProssBarhandleText.setVisibility(View.GONE);
                     }
                     break;
                 case -1:
                     Toast.makeText(ProgressbarDemo.this,"下载失败", 1).show();
                     break;
                 }
             }
         };

2、使用AsyncTask方法,效果图与handle效果一样
具体代码如下:
//进度条synctask按钮监听
     class ProssBarSyncButtonListener implements OnClickListener {
         @Override
         public void onClick(View v) {
              new AsyncLoader().execute((Void)null);  
         }
     }       
      //AsyncTask 任务执行
     class AsyncLoader extends AsyncTask<Void, Integer, Integer> {
         @Override
 //         在doInBackground方法执行前执行
         protected void onPreExecute(){
             progressBarHandle.setVisibility(View.VISIBLE); 
             myProssBarhandleText.setVisibility(View.VISIBLE);
             progressBarHandle.setMax(100000);
         }
 //        做具体的耗时操作
         protected Integer doInBackground(Void... params) {
             //这里以1万的进度条刻度来显示
             int totalSize = 100000;
             for (int i = 0; i < 100000; ) { 
                 publishProgress(i);  //通过推送消息传递数据给onProgressUpdate方法执行
                 i+=10;
             }
             return totalSize;
         }
 //        在doInBackground方法执行过程中执行
         protected void onProgressUpdate(Integer... progress) {
             progressBarHandle.setProgress(progress[0]);  
             float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax();
             int result = (int)(num*100);
              myProssBarhandleText.setText(result+ "%");
         }
 //        在doInBackground方法结束后执行
         protected void onPostExecute(Integer result) {
             Toast.makeText(ProgressbarDemo.this, "下载成功,下载了"+result, 1).show(); 
             myProssBarhandleText.setVisibility(View.GONE);
             progressBarHandle.setVisibility(View.GONE);
         }
     }

点击下载DEMO示例
PHP 相关文章推荐
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
php 什么是PEAR?(第二篇)
Mar 19 PHP
PHP删除数组中的特定元素的代码
Jun 28 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
php自定文件保存session的方法
Dec 10 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
PHP 出现 http500 错误的解决方法
Mar 09 PHP
PHP中国际化的字符串排序和比较对象详解
Aug 23 PHP
具有时效性的php加密解密函数代码
Jun 19 #PHP
一个简单的php加密解密函数(动态加密)
Jun 19 #PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 #PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 #PHP
深入PHP数据加密详解
Jun 18 #PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 #PHP
php多个字符串替换成同一个的解决方法
Jun 18 #PHP
You might like
linux下php上传文件注意事项
2016/06/11 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
vue项目中应用ueditor自定义上传按钮功能
2018/04/27 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
浅谈Python的异常处理
2016/06/19 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Flask之pipenv虚拟环境的实现
2019/11/26 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
python打包多类型文件的操作方法
2020/09/21 Python
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
高中英语教学反思
2014/02/04 职场文书
律师催款函范文
2015/06/24 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
Python之matplotlib绘制折线图
2022/04/13 Python
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS