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 相关文章推荐
PHP iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
PHP实现时间轴函数代码
Oct 08 PHP
深入理解php的MySQL连接类
Jun 07 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
PHP超全局数组(Superglobals)介绍
Jul 01 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
[原创]php实现 data url的图片生成与保存
Dec 04 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
PHP chr()函数讲解
Feb 11 PHP
php 中的信号处理操作实例详解
Mar 04 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
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
JavaScript null和undefined区别分析
2009/10/14 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
利用python求积分的实例
2019/07/03 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
夜不归宿检讨书
2014/02/25 职场文书
客服部班长工作责任制
2014/02/25 职场文书
新春文艺演出主持词
2014/03/27 职场文书
社区重阳节活动总结
2015/03/24 职场文书
董事会决议范本
2015/07/01 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
vue elementUI表格控制对应列
2022/04/13 Vue.js
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL