当我们的应用在进行耗时操作时,显示一个进度条呈现给用户,让用户知道当前进度是一个很好的体验,接下来我们就来简单了解下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

ProgressBar的简单使用的更多相关文章

  1. android学习ProgressBar的简单使用

    android 提供的ProgressBar控件分为两种,一种是不带进度的进度条,一种是带进度的进度条,如果可以计算任务的完成量那么就用带进度条的,如果无法计算任务量,那么就使用不带进度的进度条.Pr ...

  2. C# ProgressBar的简单使用

    ProgressBar控件(进度条)用于在win窗体中显示进度,由于它的值会不断更新,为了不让界面假死,一般都是采用多线程的方式对进度条进行管理.有关ProgressBar的理论基础跟详细知识我在这里 ...

  3. Android 打造形形色色的进度条 实现可以如此简单

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重 ...

  4. Android进度条控件ProgressBar使用

    ProgressBar有四种样式,圆形的(大,中,小)和直条形的(水平) 对应的style为 <LinearLayout xmlns:android="http://schemas.a ...

  5. Android_自定义进度条

    转载:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重复造轮子的 ...

  6. Android简单自定义圆形和水平ProgressBar

    ProgressBar简介 继承于View类,直接子类有AbsSeekBar和ContentLoadingProgressBar,其中AbsSeekBar的子类有SeekBar和RatingBar,可 ...

  7. 最简单的耗时组件(窗口activity里面放一个progressBar)

    ①.先定义一个activity package com.example.administrator.actionbardemo; import android.app.Activity; import ...

  8. jqueryui组件progressbar进度条和日期组件datepickers的简单使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. jquery ui progressbar简单使用deom

    jquery api 和下载: http://api.jqueryui.com/progressbar/#option-value <!doctype html> <html lan ...

随机推荐

  1. [COGS 2524]__完全平方数

    Description 一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数(Pefect Sqaure),也称平方数.小A认为所有的平方数都是很perfect的~ 于是他给了小B一个任务 ...

  2. 贼有意思[最长上升公共子序列](SAC大佬测试题)

    题目描述Awson 最近越来越蠢了,一天就只知道 zyys.他定义了一个 zyys 数列:这个数列满足:1.是另外两个数列 A,B 的公共子序列;2.数列单调递增.现在他有一个问题,我们假设知道两个长 ...

  3. slab机制

    1.内部碎片和外部碎片 外部碎片 什么是外部碎片呢?我们通过一个图来解释: 假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框.这个时候,在这段内存上不能找到连续的5 ...

  4. Codeforces Round #419 D. Karen and Test

    Karen has just arrived at school, and she has a math test today! The test is about basic addition an ...

  5. 基于SSE4和多核编程的电子相册的实现

    基于SSE4和多核编程的电子相册的实现   摘要:电子相册中前后两张图片的切换会产生淡入淡出效果,而且切换过程中需要大量的中间计算过程,而SSE4和多核编程技术能够有效加快中间的计算过程,有效减少图片 ...

  6. mooc-python语言语法week3-6

    week3 1.类型的概念:程序编程不允许有歧义的数据类型存在,所以对数据进行了划分,python语言类型分为,数字类型.字符串类型.元组类型.列表类型.文件类型.字典类型. i:数字类型: pyth ...

  7. python2.7入门---运算符

        已经分享过变量类型的基本概念了,接下来就研究了一下运算符的基础知识.接下来我们就来看一下内容.举个简单的例子 4 +5 = 9 .例子中,4 和 5 被称为操作数,"+" ...

  8. windows的常用快捷键(实用篇)

    整理一下windows的常用快捷键,有些快捷键老不用都忘记了,这里整理一下方便自己以后忘记时翻阅. 一.Fn键的使用 1.F1帮助 2.F2重命名 3.F3打开搜索 4.F4打开地址栏常用地址 5.F ...

  9. Linux学习之CentOS(九)-----文件与目录的默认权限与隐藏权限

    文件与目录的默认权限与隐藏权限 一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (d) 与文件 (-) 或者是连结档 (l) 等等的属性! 要修改属性的方法在前面也约略 ...

  10. angular2+ionic2架构介绍

    不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2+typescript 2. 项目结构 3. S ...