ProgressBar 水平进度条(初步)

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自带样式的水平进度条,比较直观的看到效果。

相关推荐

csuhanshuai / 0评论 2013-05-22
xiaozhifree / 0评论 2013-02-01