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

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

  1. style="@android:style/Widget.ProgressBar.Horizontal"

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

主程序(MainActivity)代码:

  1. package com.example.progressBar;
  2.  
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.annotation.SuppressLint;
  7. import android.app.Activity;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.ProgressBar;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14.  
  15. public class MainActivity extends Activity {
  16.  
  17. private ProgressBar progressBar;
  18. private TextView progressText;
  19. private Button btn;
  20. private int progress=5;
  21. private Handler handler;
  22.  
  23. @SuppressLint("HandlerLeak")
  24. @Override
  25. protected void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_main);
  28.  
  29. progressBar=(ProgressBar) findViewById(R.id.progressBar);
  30. progressBar.setProgress(5);
  31. progressText=(TextView) findViewById(R.id.progressText);
  32. btn=(Button) findViewById(R.id.btn);
  33. btn.setOnClickListener(new OnClickListener() {
  34. @Override
  35. public void onClick(View arg0) {
  36. //子线程完成耗时操作
  37. new Thread(new Task()).start();
  38. }
  39. });
  40.  
  41. //主线程更新UI
  42. handler=new Handler(){
  43. @Override
  44. public void handleMessage(Message msg) {
  45. switch (msg.what) {
  46. case 0:
  47. progressBar.setProgress(progress);//更新进度
  48. progressText.setText(""+progress);
  49. break;
  50. case 1:
  51. progressBar.setProgress(0);
  52. progressText.setText("0");
  53. Toast.makeText(getApplicationContext(), "进入游戏!!!", Toast.LENGTH_SHORT).show();
  54. break;
  55. }
  56. };
  57. };
  58.  
  59. }
  60.  
  61. private class Task implements Runnable {
  62. @Override
  63. public void run() {
  64. while (true) {
  65. dowork();
  66. Message msg = new Message();
  67. if (progress < 5&&progress>0) {
  68. msg.what = 0;
  69. handler.sendMessage(msg);
  70. } else if (progress <=0) {
  71. msg.what = 1;
  72. handler.sendMessage(msg);
  73. break;
  74. }
  75.  
  76. }
  77. }
  78. }
  79.  
  80. //耗时操作,每执行一次,暂停一秒
  81. private void dowork() {
  82. try {
  83. Thread.sleep(1000);
  84. --progress;
  85. } catch (InterruptedException e) {
  86. e.printStackTrace();
  87. }
  88. }
  89.  
  90. }

布局:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. >
  6.  
  7. <Button
  8. android:id="@+id/btn"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="开始"/>
  12.  
  13. <ProgressBar
  14. android:id="@+id/progressBar"
  15. android:layout_width="match_parent"
  16. android:layout_height="3dp"
  17. android:layout_centerInParent="true"
  18. android:max="5"
  19. style="@android:style/Widget.ProgressBar.Horizontal"/>
  20. <TextView
  21. android:id="@+id/progressText"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:layout_centerInParent="true"
  25. android:layout_below="@+id/progressBar"
  26. android:text="5"
  27. android:textSize="20sp"/>
  28.  
  29. </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. [BZOJ 4919]大根堆

    Description 题库链接 给定一棵 \(n\) 个节点的有根树,每个点有一个权值 \(val_i\) .你需要选择尽可能多的节点,使得:对于任意两个点 \(i,j\) ,如果 \(i\) 在树 ...

  2. k-d tree模板练习

    1. [BZOJ]1941: [Sdoi2010]Hide and Seek 题目大意:给出n个二维平面上的点,一个点的权值是它到其他点的最长距离减最短距离,距离为曼哈顿距离,求最小权值.(n< ...

  3. ●BZOJ 2669 [cqoi2012]局部极小值

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2669 题解: 容斥,DP,DFS 先看看 dp 部分:首先呢,X的个数不会超过 8个.个数很 ...

  4. bzoj 3673&3674: 可持久化并查集 by zky

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  5. python类库numpy中常见函数的用法

    1. numpy.reshape  重塑 reshape是一种函数,函数可以重新调整矩阵的行数.列数.维数. B = reshape(A,m,n) 返回一个m*n的矩阵B, B中元素是按列从A中得到的 ...

  6. 认识Json解析json生成json

    .markdown-body hr::after,.markdown-body::after { clear: both } .loopLine,.messageLine0 { } .markdown ...

  7. 如何在 vmware esxi 中开放 VNC功能及端口实现远程管理 完整篇

    VMWare esxi中开放 VNC功能及端口实现远程管理 完整篇 在多个论坛上看了相关文章,总的写得不完整.现将各方资源整编写完整版.详文如下! (图片来自51CTO) 步骤1. 修改ESXi主机的 ...

  8. Spring的注解@Qualifier小结

    有以下接口: public interface EmployeeService { public EmployeeDto getEmployeeById(Long id); } 有两个实现类: @Se ...

  9. 条件语句,while循环语句:完整的温度转换程序

    while True: a = int(input('摄氏温度换为华氏温度请按 1\n华氏温度转为摄氏温度请按 2\n退出请按 3\n')) if a==1: c = float(input('请输入 ...

  10. spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护

    在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...