博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ProgressBar的简单使用
阅读量:6318 次
发布时间:2019-06-22

本文共 2229 字,大约阅读时间需要 7 分钟。

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

布局:

源代码地址:
你可能感兴趣的文章
《Ansible权威指南》一2.7 本章小结
查看>>
一些重要 Docker 命令的简单介绍
查看>>
微服务,微架构[六]之springboot集成mybatis
查看>>
RDS SQL Server - 专题分享 - 巧用执行计划缓存之索引缺失
查看>>
诺奖得主Wilczek:人工智能正在解放我们的大脑
查看>>
C++实践参考——分数类中的运算符重载
查看>>
如何从开发环境直连线上(IPTables)
查看>>
setContentView是如何一步一步被显示出来的?
查看>>
电脑重装计划
查看>>
【肥朝】从JDK中,我们能学到哪些设计模式?
查看>>
RecyclerView综合案例库和系列博客
查看>>
TensorFlow Build from Source for macOS
查看>>
ES5和ES6中对继承的实现
查看>>
Introducting To Siri Shortcuts
查看>>
阻塞同步 异步
查看>>
小程序分页加载
查看>>
JAVA 并发之路 (二) 线程安全性
查看>>
从0开始学习BFC
查看>>
数据结构进阶篇-红黑树
查看>>
前端开发学习Day21
查看>>