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
ProgressBar的简单使用的更多相关文章
- android学习ProgressBar的简单使用
android 提供的ProgressBar控件分为两种,一种是不带进度的进度条,一种是带进度的进度条,如果可以计算任务的完成量那么就用带进度条的,如果无法计算任务量,那么就使用不带进度的进度条.Pr ...
- C# ProgressBar的简单使用
ProgressBar控件(进度条)用于在win窗体中显示进度,由于它的值会不断更新,为了不让界面假死,一般都是采用多线程的方式对进度条进行管理.有关ProgressBar的理论基础跟详细知识我在这里 ...
- Android 打造形形色色的进度条 实现可以如此简单
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重 ...
- Android进度条控件ProgressBar使用
ProgressBar有四种样式,圆形的(大,中,小)和直条形的(水平) 对应的style为 <LinearLayout xmlns:android="http://schemas.a ...
- Android_自定义进度条
转载:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重复造轮子的 ...
- Android简单自定义圆形和水平ProgressBar
ProgressBar简介 继承于View类,直接子类有AbsSeekBar和ContentLoadingProgressBar,其中AbsSeekBar的子类有SeekBar和RatingBar,可 ...
- 最简单的耗时组件(窗口activity里面放一个progressBar)
①.先定义一个activity package com.example.administrator.actionbardemo; import android.app.Activity; import ...
- jqueryui组件progressbar进度条和日期组件datepickers的简单使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jquery ui progressbar简单使用deom
jquery api 和下载: http://api.jqueryui.com/progressbar/#option-value <!doctype html> <html lan ...
随机推荐
- [BZOJ 4919]大根堆
Description 题库链接 给定一棵 \(n\) 个节点的有根树,每个点有一个权值 \(val_i\) .你需要选择尽可能多的节点,使得:对于任意两个点 \(i,j\) ,如果 \(i\) 在树 ...
- k-d tree模板练习
1. [BZOJ]1941: [Sdoi2010]Hide and Seek 题目大意:给出n个二维平面上的点,一个点的权值是它到其他点的最长距离减最短距离,距离为曼哈顿距离,求最小权值.(n< ...
- ●BZOJ 2669 [cqoi2012]局部极小值
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2669 题解: 容斥,DP,DFS 先看看 dp 部分:首先呢,X的个数不会超过 8个.个数很 ...
- bzoj 3673&3674: 可持久化并查集 by zky
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- python类库numpy中常见函数的用法
1. numpy.reshape 重塑 reshape是一种函数,函数可以重新调整矩阵的行数.列数.维数. B = reshape(A,m,n) 返回一个m*n的矩阵B, B中元素是按列从A中得到的 ...
- 认识Json解析json生成json
.markdown-body hr::after,.markdown-body::after { clear: both } .loopLine,.messageLine0 { } .markdown ...
- 如何在 vmware esxi 中开放 VNC功能及端口实现远程管理 完整篇
VMWare esxi中开放 VNC功能及端口实现远程管理 完整篇 在多个论坛上看了相关文章,总的写得不完整.现将各方资源整编写完整版.详文如下! (图片来自51CTO) 步骤1. 修改ESXi主机的 ...
- Spring的注解@Qualifier小结
有以下接口: public interface EmployeeService { public EmployeeDto getEmployeeById(Long id); } 有两个实现类: @Se ...
- 条件语句,while循环语句:完整的温度转换程序
while True: a = int(input('摄氏温度换为华氏温度请按 1\n华氏温度转为摄氏温度请按 2\n退出请按 3\n')) if a==1: c = float(input('请输入 ...
- spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护
在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...