Android中ProgressBar的使用-通过Handler与Message实现进度条显示
场景
进度条效果
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
将布局改为相对布局,然后添加一个ProgressBar,并添加id属性。
然后通过
- android:max=""
设置进度条最大值
通过
- 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">
- <ProgressBar
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleHorizontal"
- android:max=""
- 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 = ;
- private Handler mHandler;
- @Override
- protected 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进行区分是否加载完成
- @Override
- public 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() {
- @Override
- public void run() {
- while (true)
- {
- //具体执行的方法的进度,返回进度
- mProgress = doWork();
- //定义一个标识,标识进度条是否加载完成
- Message message = new Message();
- if(mProgress <)
- {
- //表示还没加载到100 则向进度条报告进度
- message.what = 0x111;
- mHandler.sendMessage(message);
- }else
- {
- //表示此时已经加载完成,向Handler发送消息 并跳出循环
- message.what =0x110;
- mHandler.sendMessage(message);
- break;
- }
- }
- }
- //具体执行 并返回进度的方法
- private int doWork()
- {
- //进度条随机加进度
- mProgress +=Math.random()*;
- try {
- //进程休眠0.5秒
- Thread.sleep();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return mProgress;
- }
- }).start(); //启动进程
- }
- }
Android中ProgressBar的使用-通过Handler与Message实现进度条显示的更多相关文章
- Android中消息系统模型和Handler Looper
http://www.cnblogs.com/bastard/archive/2012/06/08/2541944.html Android中消息系统模型和Handler Looper 作为Andro ...
- 【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示
尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd ...
- android中ProgressBar和ListView
ProgressBar进度条的使用情况: 进度条的.xml声明:如果不声明格式,则默认格式为转圆圈的形式,声明进度条的visibility为不可见. <ProgressBar android:i ...
- Android中ProgressBar
ProgressBar提供如下方法来操作进度: setProgress(int):设置进度完成的百分比; incrementProgressBy(int):设置进度条的进度的增加或减少,具体取决于参数 ...
- Android开发学习之路-使用Handler和Message更新UI
在Android中,在非主线程中更新UI控件是不安全的,app在运行时会直接Crash,所以当我们需要在非主线程中更新UI控件,那么就需要用到Handler和Message来实现 Demo中,使用到一 ...
- handler 异步执行(进度条加载到100)
生明一个handler 对象(可重写handlerMessage 方法) 声明一个Runnable 对象,需重写run方法 按钮事件:handler对象实例的post方法调用线程. 线程的run方法开 ...
- android 开发-自定义多节点进度条显示
看效果图: 里面的线段颜色和节点图标都是可以自定义的. main.xml <RelativeLayout xmlns:android="http://schemas.android.c ...
- WinForm中使用BackgroundWorker异步加载数据并使用进度条
在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...
- Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)
效果: 问题:可拖动进度条随进度条移动时,会致使音乐卡顿(待解决) xml <?xml version="1.0" encoding="utf-8"?&g ...
随机推荐
- Linux下socket编程基本知识
本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...
- ip 地址库 这个 准么 呢
- 创建dynamics CRM client-side (五) - 使用regular expression (正则表达式)来检查phone number
我们这次要使用account, 让我们首先重建一个JavaScript. 建议每个entity都创建专属的js // Converting functions to Namespace Notatio ...
- Liunx(centos8)下的yum的基本用法和实例
yum 命令 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的 ...
- swift开发度假计划app
用swift开发一个完整的度假地app,设计到布局.数据绑定.数据编辑.页面导航等:适合初学者: github:(git@github.com:Frankltf/ios-swift-app.git)
- Codeforces Round #617 (Div. 3)F. Berland Beauty
题意: 给一棵树,边权未知,现在给m组约束,每组约束给出从u到v路径中的最小值,现在让你给出一组边权,使得符合之前的约束,不能给出输出-1 思路: 因为n较小,对于每组约束我们可以直接暴力修改路径上的 ...
- java 排序算法分析
一.冒泡排序(时间复杂度O(N^2)) public int[] bubbling(int[] arr){ ) return arr; ; i--){ 1 ; j < i-; j ++){ 2 ...
- 外网通过frp进行windows远程文件共享
需求 远程访问位于内网中的文件.例如,家里,公司内. 所需技术 frp windows文件共享 具有公网地址的服务器一台 实现过程 windows文件共享,首先自己在局域网内实现.这不是本文重点. 公 ...
- JSP-导入taglib 出现classNotFound异常
案例 前端登录跳转到指定jsp,报classNoFoundException,原因是页面导入 <%@ taglib uri="http://java.sun.com/jsp/jstl/ ...
- Spring 依赖注入两种方式
(1):通过 setter 方法注入: <property name=“ ” ></property> 其中,name属性的取值依setter方法名而定,要求这个类里面这个对应 ...