ProgressBar的简单使用

当我们的应用在进行耗时操作时,显示一个进度条呈现给用户。让用户知道当前进度是一个非常好的体验,接下来我们就来简单了解下ProgressBar(本文主要针对刚開始学习的人。大神能够绕开啦),先看效果图:





进度条ProgressBar共同拥有几种样式。如圆形,长条形等等,本例中用的是长条形:

style="@android:style/Widget.ProgressBar.Horizontal"
进度是由5-0,逆向显示的,也就是一个倒计时。方法主要是Thread+Handler,在线程中通过不断变化的进度值,将消息通过handler传递给主线程并更新UI:

主程序(MainActivity)代码:

package com.example.progressBar;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ProgressBar progressBar;
	private TextView progressText;
	private Button btn;
	private int progress=5;
	private Handler handler;
	
	@SuppressLint("HandlerLeak")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		progressBar=(ProgressBar) findViewById(R.id.progressBar);
		progressBar.setProgress(5);
		progressText=(TextView) findViewById(R.id.progressText);
		btn=(Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				//子线程完毕耗时操作
			    new Thread(new Task()).start();
			}
		});
		
		//主线程更新UI
		handler=new Handler(){
			@Override
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case 0:
					progressBar.setProgress(progress);//更新进度
					progressText.setText(""+progress);
					break;
				case 1:
					progressBar.setProgress(0);
					progressText.setText("0");
					Toast.makeText(getApplicationContext(), "进入游戏。!!

", Toast.LENGTH_SHORT).show(); break; } }; }; } private class Task implements Runnable { @Override public void run() { while (true) { dowork(); Message msg = new Message(); if (progress < 5&&progress>0) { msg.what = 0; handler.sendMessage(msg); } else if (progress <=0) { msg.what = 1; handler.sendMessage(msg); break; } } } } //耗时操作,每运行一次,暂停一秒 private void dowork() { try { Thread.sleep(1000); --progress; } catch (InterruptedException e) { e.printStackTrace(); } } }


布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="開始"/>

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="3dp"
        android:layout_centerInParent="true"
        android:max="5" 
        style="@android:style/Widget.ProgressBar.Horizontal"/>
    <TextView 
        android:id="@+id/progressText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_below="@+id/progressBar"
        android:text="5"
        android:textSize="20sp"/>

</RelativeLayout>

源代码地址:http://download.csdn.net/detail/baiyuliang2013/7322607

原文地址:https://www.cnblogs.com/jhcelue/p/7080586.html