Android中ProgressBar的使用-通过Handler与Message实现进度条显示
场景
进度条效果
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
将布局改为相对布局,然后添加一个ProgressBar,并添加id属性。
然后通过
android:max="100"
设置进度条最大值
通过
android:layout_alignParentBottom="true"
android:layout_marginBottom="50dp"
设置其位置在底部并设置外边距
关于进度条的样式,参考如下
这里使用的进度条样式是
style="?android:attr/progressBarStyleHorizontal"
完整xml示例代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ProgressBarActivity"><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"style="?android:attr/progressBarStyleHorizontal"android:max="100"android:layout_alignParentBottom="true"android:layout_marginBottom="50dp"android:id="@+id/progressBar"/></RelativeLayout>
然后来到Activity
要实现进度条的简单流程如下
首先在Activity中声明进度条对象、进度值、Handler对象。
关于Hnadler对象,因为Android不支持在主线程中更新UI控件,所以提供了Handler对象。
首先通过id获取进度条对象,然后实例化Handler,需要重写其handleMessage方法
在handleMessage方法中,通过msg的标识来判断是否完成进度条的加载。
然后需要新开一个线程,在线程中随机给进度条添加进度值,然后判断是否到100,进而报告不同的进度和标识变量。
完整示例代码
package com.badao.relativelayouttest;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;import java.util.prefs.PreferenceChangeEvent;public class ProgressBarActivity extends AppCompatActivity {private ProgressBar progressBar;private int mProgress = 0;private Handler mHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_progress_bar);//获取进度条控件progressBar = (ProgressBar) findViewById(R.id.progressBar);//Android 不支持在主线程中更新UI组件 所以提供了Handler对象mHandler = new Handler(){//通过消息代码msg进行区分是否加载完成@Overridepublic void handleMessage(@NonNull Message msg) {if(msg.what ==0x111){//给进度条赋值progressBar.setProgress(mProgress);}else{Toast.makeText(ProgressBarActivity.this,"加载完成",Toast.LENGTH_SHORT).show();progressBar.setVisibility(View.GONE);}}};//新建一个线程new Thread(new Runnable() {@Overridepublic void run() {while (true){//具体执行的方法的进度,返回进度mProgress = doWork();//定义一个标识,标识进度条是否加载完成Message message = new Message();if(mProgress <100){//表示还没加载到100 则向进度条报告进度message.what = 0x111;mHandler.sendMessage(message);}else{//表示此时已经加载完成,向Handler发送消息 并跳出循环message.what =0x110;mHandler.sendMessage(message);break;}}}//具体执行 并返回进度的方法private int doWork(){//进度条随机加进度mProgress +=Math.random()*10;try {//进程休眠0.5秒Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}return mProgress;}}).start(); //启动进程}
}
Android中ProgressBar的使用-通过Handler与Message实现进度条显示相关推荐
- android 播放mp3 倒计时,Android实战 - 音心播放器 (MusicActivity - 倒计时 ,进度条实现)...
1.背景 还是音乐播放界面,实现倒计时和进度条功能,基本实现过程: 当打开MusicActivity 的时候,MusicService会发送广播给MusicActivity ,后开始当前播放的时间进度 ...
- android倒计时水平进度条,Android实战 - 音心播放器 (MusicActivity - 倒计时 ,进度条实现)...
1.背景 还是音乐播放界面,实现倒计时和进度条功能,基本实现过程: 当打开MusicActivity 的时候,MusicService会发送广播给MusicActivity ,后开始当前播放的时间进度 ...
- bootstrap中单个按钮、按钮组、徽章、进度条
单按钮: 背景按钮:bootstrap提供了具有特殊意义背景的按钮样式,使用时只需给自己的按钮(button.input.a)加bootstrap提供的类名即可,其具体如下: 类名 描述 .btn 基 ...
- python tkinter进度条_在python tkinter中Canvas实现进度条显示的方法
如下所示: from tkinter import * import time #更新进度条函数 def change_schedule(now_schedule,all_schedule): can ...
- Mac如何删除在磁盘空间中的可清除空间以及Mac开机时进度条卡100%的解决办法
Mac如何删除在磁盘空间中的可清除空间以及Mac开机时进度条卡100%的解决办法 1.Mac如何删除在磁盘空间中的可清除空间 对于mac来说磁盘的空间是十分宝贵的,小编会定期的查看一下自己电脑的磁盘使 ...
- android中的progressbar,解析android中ProgressBar的用法
范例说明Android的Widget,有许多是为了与User交互而特别设计的,但也有部分是作为程序提示.显示程序运行状态的Widget.现在介绍的范例,与前一章介绍过的ProgressDialog对话 ...
- Android反向进度条(ProgressBar)的实现——从右到左的进度条
Android反向进度条(ProgressBar)--从右到左的进度条 前言: 最近在项目中需要使用到反向进度条,在网上查了些资料,感觉对自己作用不大,于是自定义样式,实现了反向进度条. 1. 第一步 ...
- Android第5天,httpclient,多线程断点续传,进度条,xUtils
httpclient 使用原始的httpclient public class MainActivity extends Activity {Handler handler = new Handler ...
- 《物联网Android程序开发案例式教程》Demo4:模拟进度条
在日常的应用中,我们经常会下载App.文件等,此时,就需要进度条来提示我们下载进度.这一章将教大家如何模拟下载进度条效果. 本案例需要用到的控件有显示图片的ImageView. 进度条控件Progre ...
最新文章
- [转载] 英语科技论文写作——Difference between APAMLA
- 图像热点(图像地图)
- ajax mysql点赞_ajax 实现点赞功能
- 深度学习笔记--单层感知机原理及代码实现
- STM32基础定时器详解
- softmax函数_反向传播之一:softmax函数
- python 分布式存储_Amazon S3 分布式存储的 python 接口实现
- JS设计模式——单例模式
- 手机如何连接远程桌面?
- chrome源代码下载 编译 linux,源代码编译chrome os
- 苹果屏蔽更新描述文件_iOS 屏蔽系统更新描述文件更新!快把烦人的系统更新提示关掉...
- 镁光 鸡血模式 linux,所以,镁光1100到底是不是全盘slc的模式?之前就几个帖子...
- 图文解说S参数(进阶篇)
- leetcode剑指offe刷题-第一题-用两个栈实现队列
- 使用 VirtualBox 虚拟机在电脑上运行 Android 系统,让电脑变安卓平板!
- 元气骑士(联机版)java合作大作业
- 「产品社群」话题讨论精华·第3期
- C++内存管理与指针的使用
- Swift 动画 —— 数字滚动UILabel动画
- redis安装和启动
热门文章
- python响铃符不响_python语法注意事项
- 抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法 (native),是否可同时被 synchronized
- oracle创建dblink语句_一文看懂Oracle12c中多租户(容器)从种子创建PDB
- python抢票_50 个加速包都抢不到车票,还不如这个 Python 抢票神器!
- ebm风扇选型手册_德国EBM离心风扇的八大结构组成你知道吗?
- arima模型 p q d 确定_时间序列分析第07讲(ARIMA模型,季节时间序列模型,均值的估计)...
- matlab正弦序列频谱,【求助】正弦信号序列fft频谱分析!!!
- 基于HTML在线考试系统开题报告,基于JSP的在线考试系统 开题报告.doc
- 服务器脚本执行sql文件命令行,sh命令执行sql脚本
- 用python 中的链表 实现 截取其中一部分_Python数据结构——链表的实现