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 andgetMax()
public synchronized int getMax() { return mMax; }这样的话就可以说明这个mMax就是进度条默认的最大值。
0 0
- widgets之progressBar
- iOS 8 之 Widgets
- widgets之ImageButton
- widgets之SeekBar
- widgets之RatingBar
- Widgets之Spinner
- jQuery UI基础----11jQuery UI Widgets-progressbar(进度条
- widgets
- widgets
- Android组件之App Widgets
- widgets之switch和ToggleButton
- Android之ProgressBar详解---自定义ProgressBar
- android之progressBar
- android控件之progressbar
- Android控件之ProgressBar
- Android控件之ProgressBar
- android 界面之 progressbar
- Android--UI之ProgressBar
- DRBD创建实现、步骤、注意事项
- lua 调用c 函数
- Spring源代码解析(五):Spring AOP获取Proxy
- 七月算法机器学习笔记4 凸优化
- 55. Jump Game
- widgets之progressBar
- forward 和redirect用法区别
- 致我终将逝去的青春
- Devstack 初始安装没有neutron组件解决办法
- 微软2016校招4月在线笔试——第一题 Font Size
- 关于android studio代码提示的问题
- 每天laravel-20160706|KeyForgotten
- Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
- activiti自定义流程之Spring整合activiti-modeler5.16实例(七):任务列表展示