瘋狂 Android 講義, 4/e – 進度顯示元件(ProgressBar)範例 P130~P133

瘋狂 Android 講義, 4/e – 進度顯示元件(ProgressBar)範例 P130~P133

瘋狂 Android 講義, 4/e – 進度顯示元件(ProgressBar)範例 P130~P133



資料來源:

    https://github.com/daichangya/book/tree/master/android
    https://pan.baidu.com/s/1d_xYJI0UQ_1tQzSj_V_NIg 提取码:70ch


XML Code

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


JAVA Code

package org.crazyit.ui;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;

import java.lang.ref.WeakReference;

/**
 * Description:<br>
 * 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a><br>
 * Copyright (C), 2001-2020, Yeeku.H.Lee<br>
 * This program is protected by copyright laws.<br>
 * Program Name:<br>
 * Date:<br>
 *
 * @author Yeeku.H.Lee kongyeeku@163.com<br>
 * @version 1.0
 */
public class MainActivity extends Activity
{
	// 该程序模拟填充长度为100的数组
	private int[] data = new int[100];
	private int hasData = 0;
	// 记录ProgressBar的完成进度
	int status = 0;
	private ProgressBar bar;
	private ProgressBar bar2;
	static class MyHandler extends Handler
	{
		private WeakReference<MainActivity> activity;
		MyHandler(WeakReference<MainActivity> activity){
			this.activity = activity;
		}
		@Override public void handleMessage(Message msg)
		{
			// 表明消息是由该程序发送的
			if (msg.what == 0x111)
			{
				activity.get().bar.setProgress(activity.get().status);
				activity.get().bar2.setProgress(activity.get().status);
			}
		}
	}
	// 创建一个负责更新的进度的Handler
	MyHandler mHandler = new MyHandler(new WeakReference<>(this));

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		bar = findViewById(R.id.bar);
		bar2 = findViewById(R.id.bar2);
		// 启动线程来执行任务
		new Thread()
		{
			@Override public void run()
			{
				while (status < 100)
				{
					// 获取耗时操作的完成百分比
					status = doWork();
					// 发送消息
					mHandler.sendEmptyMessage(0x111);
				}
			}
		}.start();
	}
	// 模拟一个耗时的操作
	public int doWork()
	{
		// 为数组元素赋值
		data[hasData++] = (int)(Math.random() * 100);
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return hasData;
	}
}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *