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 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
工厂模式在Zend Framework中应用介绍
Jul 10 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
php获取指定日期之间的各个周和月的起止时间
Nov 24 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
is_file和file_exists效率比较
Mar 14 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python 的内置字符串方法小结
2016/03/15 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python爬虫添加请求头代码实例
2019/12/28 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
十八届三中全会感言
2014/03/10 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
运动会表扬稿范文
2015/05/05 职场文书
数学复习课教学反思
2016/02/18 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
Python turtle实现贪吃蛇游戏
2021/06/18 Python
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
Java无向树分析 实现最小高度树
2022/04/09 Javascript
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
box-shadow单边阴影的实现
2023/05/21 HTML / CSS