场景

进度条效果

注:

博客:
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实现进度条显示的更多相关文章

  1. Android中消息系统模型和Handler Looper

    http://www.cnblogs.com/bastard/archive/2012/06/08/2541944.html Android中消息系统模型和Handler Looper 作为Andro ...

  2. 【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示

    尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd ...

  3. android中ProgressBar和ListView

    ProgressBar进度条的使用情况: 进度条的.xml声明:如果不声明格式,则默认格式为转圆圈的形式,声明进度条的visibility为不可见. <ProgressBar android:i ...

  4. Android中ProgressBar

    ProgressBar提供如下方法来操作进度: setProgress(int):设置进度完成的百分比; incrementProgressBy(int):设置进度条的进度的增加或减少,具体取决于参数 ...

  5. Android开发学习之路-使用Handler和Message更新UI

    在Android中,在非主线程中更新UI控件是不安全的,app在运行时会直接Crash,所以当我们需要在非主线程中更新UI控件,那么就需要用到Handler和Message来实现 Demo中,使用到一 ...

  6. handler 异步执行(进度条加载到100)

    生明一个handler 对象(可重写handlerMessage 方法) 声明一个Runnable 对象,需重写run方法 按钮事件:handler对象实例的post方法调用线程. 线程的run方法开 ...

  7. android 开发-自定义多节点进度条显示

    看效果图: 里面的线段颜色和节点图标都是可以自定义的. main.xml <RelativeLayout xmlns:android="http://schemas.android.c ...

  8. WinForm中使用BackgroundWorker异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

  9. Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)

    效果: 问题:可拖动进度条随进度条移动时,会致使音乐卡顿(待解决) xml <?xml version="1.0" encoding="utf-8"?&g ...

随机推荐

  1. 软件工程概论 网站开发要掌握的技术 &登录界面

    1.网站系统开发需要掌握的技术 一.界面和用户体验(Interface and User Experience) 1.1 知道如何在基本不影响用户使用的情况下升级网站.通常来说,你必须有版本控制系统( ...

  2. 【WPF学习】第十七章 键盘输入

    当用户按下键盘上的一个键时,就会发生一系列事件.下表根据他们的发生顺序列出了这些事件: 表 所有元素的键盘事件(按顺序) 键盘处理永远不会像上面看到的这么简单.一些控件可能会挂起这些事件中的某些事件, ...

  3. Cobalt_Strike扩展插件

    Cobalt_Strike3.14下载: https://download.csdn.net/download/weixin_41082546/11604021 https://github.com/ ...

  4. 小白学Java:File类

    目录 小白学Java:File类 不同风格的分隔符 绝对与相对路径 File类常用方法 常用构造器 创建方法 判断方法 获取方法 命名方法 删除方法 小白学Java:File类 我们可以知道,存储在程 ...

  5. axios用post传参,后端无法获取参数问题

    最近用vue+nodejs写项目,前端使用axios向后台传参,发现后台接收不到参数. 后台是node+express框架,然后使用了body-parser包接收参数,配置如下: const expr ...

  6. 学_汇编语言_王爽版 要点采集笔记(未完待续&hellip;)

    第一章 基础知识 存储器(内存)存放CPU工作的指令和数据(CPU可以直接使用的信息在内存中存放):指令和数据都是二进制数没有任何区别,由CPU决定是数据还是指令 内存单元:存储器被分为若干个存储单元 ...

  7. 将Ubuntu下网卡名称enss改为eth0

    将Ubuntu下网卡名称enss改为eth0   sudo nano /etc/default/grub 找到GRUB_CMDLINE_LINUX=""改为GRUB_CMDLINE ...

  8. swift开发度假计划app

    用swift开发一个完整的度假地app,设计到布局.数据绑定.数据编辑.页面导航等:适合初学者: github:(git@github.com:Frankltf/ios-swift-app.git)

  9. MySQL5.7 中的query_cache_size

    摘自:http://jackyrong.iteye.com/blog/2173523 1 原理    MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行 ...

  10. Android View如何获取焦点

    Android新启动Activity,dialog或者其他窗体中中包含EditText, 新启动的activity的焦点默认在EditText上,这是android系统会弹出软键盘,挤压activit ...