通过进度条可以让用户知道程序的运行进度,同时也是一种交互手段,可以使用户觉得等待的时间并不是那么的长。使用进度条时,可以使用系统默认的样式,也可以通过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;
@Override
public 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);
//创建一个负责更新的进度的Handler
final Handler mHandler = new Handler()
{
@Override
public 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() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
hasData = 0;
status = 0;
//启动线程来执行任务
new Thread()
{
public void run()
{
while (status < 100)
{
// 获取耗时操作的完成百分比
status = doWork();
// 发送消息到Handler
Message 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;
}
}