blueskyhk 2013-12-25
<?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" > <ProgressBar android:id="@+id/progressBar" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_pb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_pb" /> </LinearLayout>
ProgressBar让用户感觉程序与他们有交互,所以我觉得设计好一个好的进度条会调整用户对程序的操作感,我也是初步学习,现在就将笔记整理一下。
Java Code
package cn.qiuzhping.module1; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; public class PB extends Activity { private int dataLength = 1000; private int[] data = new int[dataLength];// 该程序模拟填充长度为1000的数组 int index = 0;// 数组下标 int step = 0;// 记录ProgressBar的完成进度 Handler mHandler = null;// 用于线程之间交互 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pb); final ProgressBar progrssBar = (ProgressBar) findViewById(R.id.progressBar); progrssBar.setMax(dataLength); mHandler = new Handler() {// 创建一个负责更新的进度的Handler @Override public void handleMessage(Message msg) { if (msg.what == 0x111) {// 根据定义的标志 表明消息是由该程序发送的,然后更新进度条。 progrssBar.setProgress(step);// 主进度 progrssBar.setSecondaryProgress(step + 50);// 次进度 Log.i("mHandler", " progressBar step = " + step); } } }; final Button startBtn = (Button) findViewById(R.id.btn_pb); startBtn.setOnClickListener(new startBtnListener()); } public void timeconsuming() {// 耗时计算 while (step < dataLength) { // Log.i("startBtnListener","timeconsuming"); step = doIndex();// 获取耗时操作的完成百分比 Message m = new Message();// 发送消息到Handler m.what = 0x111;// 给消息定一个标志,让handler接受多个message的时候, // 进行区分给与对应操作的what // 是用户自定义的消息代码,这样接受者可以了解这个消息的信息每个handler各自包含自己的消息代码.所以不用担心自定义的消息跟其他handlers有冲突。 mHandler.sendMessage(m);// 发送消息 } } class startBtnListener implements OnClickListener {// 设置startBtn的监听器 @Override public void onClick(View arg0) { index = 0; step = 0; new Thread() {// 通过设置匿名内部类,启动线程来执行任务 public void run() { timeconsuming(); Log.i("startBtnListener", "timeconsuming()"); } }.start(); } } public int doIndex() {// 模拟一个耗时的操作 int result = (int) (Math.random() * dataLength); data[index++] = result;// 为数组元素赋值 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } Log.i("doIndex", "index=" + index + "||result=" + result); return index; } }
这样就能简单的使用Android自带样式的水平进度条,比较直观的看到效果。