widgets之progressBar

来源:互联网 发布:ubuntu 16.04合理分区 编辑:程序博客网 时间:2024/06/05 19:01

ProgressBar 进度条

进度条的样式大体上分为两种:


是通过标签

style="?android:attr/progressBarStyleHorizontal"
来设置的上面这个是第二种水平方向的进度条,如果不加style标签的话默认的就是圆形的这种,这种是不确定进度的进度条。

<span style="white-space:pre"></span><ProgressBar android:id="@+id/progressBar01"      android:layout_width="wrap_content"       android:layout_height="wrap_content"          android:layout_gravity="center_vertical"></ProgressBar><ProgressBar android:id="@+id/progressBar02"      android:layout_width="wrap_content"       android:layout_height="wrap_content"          style="?android:attr/progressBarStyleHorizontal"      android:progress="50">

圆形这种进度条用于一种交互提示,某个系统或者程序在启动中请稍后,而水平方向的进度条则是有实实在在的进度的含义所以下一步就是要怎么实现文件传输之类的传输进度和进度条的同步。

在java同步一般都是使用多线程的方式实现的,但是在Android里Activity是单线程不允许使用多线程刷新UI但是可以使用系统提供的Handle类来解决,因此思路就变成了,在多线程中调用系统的Handle类的sendMessage方法来实现动态刷新UI的效果,流程如下图


具体的代码如下:

final Handler hd = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if(msg.what == 111){mProgressStatus = index;pb1.setProgress(mProgressStatus);}}};new Thread(){@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();while(index<100){doWork();Message msg = new Message();msg.what = 111;hd.sendMessage(msg);}}}.start();

其中doWork()是一个耗时的方法,这里是使用的是新建一个数组。具体的方法如下:

private void doWork(){ randData[index++] = (int)(Math.random() * 100);          //模拟一个比较耗时的操作          try {              Thread.sleep(100);          } catch (InterruptedException e) {                          e.printStackTrace();          } }
这样的话进度条就会动起来了。至于为什么到了100就到达最大值其实我开始的时候也一直在想这样问题,后来查了一下文档:

private void initProgressBar() {      mMax = 100;      mProgress = 0;      mSecondaryProgress = 0;      mIndeterminate = false;      mOnlyIndeterminate = false;      mDuration = 4000;      mBehavior = AlphaAnimation.RESTART;      mMinWidth = 24;      mMaxWidth = 48;      mMinHeight = 24;      mMaxHeight = 48;  }
这个就是对ProgressBar进行初始化的代码,从这里我们可以看出,这里的最大的值是mMax = 100,文档中对setProgress()的解释为:

setProgress

Set the current progress to the specified value. Does not do anything if the progress bar is in indeterminate mode.

参数:
progress - the new progress, between 0 and getMax()
getMax()的说明是:

public synchronized int getMax() {           return mMax;        }
这样的话就可以说明这个mMax就是进度条默认的最大值。




0 0
原创粉丝点击