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 ...
随机推荐
- arch_遇到的问题
archlinux安装 wiki安装 可以参考这个来安装 $如果你跟我一样是用校园网安装的$ 记得使用pppoe-setup 来联网 arclinux 图形界面安装 参考 kde图形安装 需要创建一个 ...
- python返回值内取出某一段数据的方法
面讲的方法只适用于返回值长度固定的内容,长度不固定,每次取得值就不会一样 比如,我们需要取出“提取码: y3rx ”“:”后面的“y3rx” 目标数据在内容的第5位到第9位,做左侧为第1位,冒号后面有 ...
- JS-07-函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ReactNative---ref的用法和技巧
1.获取上下文的组件 2. ref属性不仅接受string类型的参数,而且它还可以接受一个function 作为callback.如:将组件view作为参数赋值给this._view <View ...
- linux下的特殊模式
单用户模式 ubuntu 16.04 单用户操作 1.重启操作系统,BIOS引导过后一直按住shift,出现GUN Grub菜单: 2.选择Advanced options for Ubuntu选项回 ...
- learn more ,study less(二):整体性学习技术(下)
随意信息的处理 随意信息,或者内容太多.太复杂的信息,都不容易理解,它们需要不同的技术.假 如你发现联想法不能帮助你理解材料,或者需要花费的时间太长,这时候处理随意信息的方 法就很适合了. 这些处理随 ...
- ubuntu 中使用makefile组织c++多文件的简陋方法
现有类定义Sales_item.hpp Sales_item.cpp 主函数my7_31.cpp(代码来源于c++primer 习题解答7_31) 希望使用makefile在Ubuntu中进行编译链接 ...
- mint ui的tabBar监听路由变化实现tabBar切换
说明 最近学习vue,使用了mint ui的tabBar,感觉好难受,结合 tab-container使用更难受,因为它不是根据路由来切换页面的.mui与它基本相反,因此它能根据搜索栏的路由变化,相应 ...
- nginx适用哪些场景
1.静态资源服务 通过本地文件系统提供服务 2.反向代理服务 ningx的强大性能 缓存 负载均衡 3.API服务 openresty
- 死磕java(4)
数组 public void int4() { int[] int2 = {1,2,3,4}; System.out.print(int2[2]); } 输出:3 另一种数组的初始化 public ...