android学习笔记26:水平进度条

来源:互联网 发布:win10 windows server 编辑:程序博客网 时间:2024/06/06 12:49

通过进度条可以让用户知道程序的运行进度,同时也是一种交互手段,可以使用户觉得等待的时间并不是那么的长。使用进度条时,可以使用系统默认的样式,也可以通过XML文件自己指定样式。

自定义的滚动条样式

<?xml version="1.0" encoding="UTF-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"><!-- 定义轨道的背景 --><item android:id="@android:id/background"android:drawable="@drawable/no" /><!-- 定义轨道上已完成部分的样式 --><item android:id="@android:id/progress"android:drawable="@drawable/ok" /></layer-list>     

布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="任务完成的进度" />    <!-- 定义一个水平进度条 -->    <ProgressBar        android:id="@+id/bar"        style="@android:style/Widget.ProgressBar.Horizontal"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:max="100" />    <!-- 定义一个水平进度条,并改变轨道外观 -->    <ProgressBar        android:id="@+id/bar2"        style="@android:style/Widget.ProgressBar.Horizontal"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:max="100"        android:progressDrawable="@drawable/my_bar" />    <Button        android:id="@+id/Button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/start" /></LinearLayout>

点击启动按钮之后,启动一个新的线程来执行任务,再通过一个Handler来接收消息和更新滚动条

public class ProgressBarTest extends Activity{//该程序模拟填充长度为100的数组private int[] data = new int[100];int hasData = 0;//记录ProgressBar的完成进度int status = 0;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);final ProgressBar bar = (ProgressBar) findViewById(R.id.bar);final ProgressBar bar2 = (ProgressBar) findViewById(R.id.bar2);//创建一个负责更新的进度的Handlerfinal Handler mHandler = new Handler(){@Overridepublic void handleMessage(Message msg){//表明消息是由该程序发送的。if (msg.what == 0x111){bar.setProgress(status);bar2.setProgress(status);}}};final Button startButton = (Button)findViewById(R.id.Button);startButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubhasData = 0;status = 0;//启动线程来执行任务new Thread(){public void run(){while (status < 100){// 获取耗时操作的完成百分比status = doWork();// 发送消息到HandlerMessage m = new Message();m.what = 0x111;// 发送消息mHandler.sendMessage(m);}}}.start();}});}//模拟一个耗时的操作。public int doWork(){//为数组元素赋值data[hasData++] = (int)(Math.random() * 100);try{Thread.sleep(100);}catch (InterruptedException e){e.printStackTrace();}return hasData;}}