场景

进度条效果

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

将布局改为相对布局,然后添加一个ProgressBar,并添加id属性。

然后通过

  1. android:max=""

设置进度条最大值

通过

  1. android:layout_alignParentBottom="true"
  2. android:layout_marginBottom="50dp"

设置其位置在底部并设置外边距

关于进度条的样式,参考如下

这里使用的进度条样式是

  1. style="?android:attr/progressBarStyleHorizontal"

完整xml示例代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context=".ProgressBarActivity">
  8.  
  9. <ProgressBar
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. style="?android:attr/progressBarStyleHorizontal"
  13. android:max=""
  14. android:layout_alignParentBottom="true"
  15. android:layout_marginBottom="50dp"
  16. android:id="@+id/progressBar"
  17.  
  18. />
  19.  
  20. </RelativeLayout>

然后来到Activity

要实现进度条的简单流程如下

首先在Activity中声明进度条对象、进度值、Handler对象。

关于Hnadler对象,因为Android不支持在主线程中更新UI控件,所以提供了Handler对象。

首先通过id获取进度条对象,然后实例化Handler,需要重写其handleMessage方法

在handleMessage方法中,通过msg的标识来判断是否完成进度条的加载。

然后需要新开一个线程,在线程中随机给进度条添加进度值,然后判断是否到100,进而报告不同的进度和标识变量。

完整示例代码

  1. package com.badao.relativelayouttest;
  2.  
  3. import androidx.annotation.NonNull;
  4. import androidx.appcompat.app.AppCompatActivity;
  5.  
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.view.View;
  10. import android.widget.ProgressBar;
  11. import android.widget.Toast;
  12.  
  13. import java.util.prefs.PreferenceChangeEvent;
  14.  
  15. public class ProgressBarActivity extends AppCompatActivity {
  16.  
  17. private ProgressBar progressBar;
  18. private int mProgress = ;
  19. private Handler mHandler;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_progress_bar);
  24.  
  25. //获取进度条控件
  26. progressBar = (ProgressBar) findViewById(R.id.progressBar);
  27. //Android 不支持在主线程中更新UI组件 所以提供了Handler对象
  28. mHandler = new Handler(){
  29. //通过消息代码msg进行区分是否加载完成
  30. @Override
  31. public void handleMessage(@NonNull Message msg) {
  32. if(msg.what ==0x111)
  33. {
  34. //给进度条赋值
  35. progressBar.setProgress(mProgress);
  36. }else
  37. {
  38. Toast.makeText(ProgressBarActivity.this,"加载完成",Toast.LENGTH_SHORT).show();
  39. progressBar.setVisibility(View.GONE);
  40. }
  41. }
  42. };
  43.  
  44. //新建一个线程
  45. new Thread(new Runnable() {
  46. @Override
  47. public void run() {
  48. while (true)
  49. {
  50. //具体执行的方法的进度,返回进度
  51. mProgress = doWork();
  52. //定义一个标识,标识进度条是否加载完成
  53. Message message = new Message();
  54. if(mProgress <)
  55. {
  56. //表示还没加载到100 则向进度条报告进度
  57. message.what = 0x111;
  58. mHandler.sendMessage(message);
  59. }else
  60. {
  61. //表示此时已经加载完成,向Handler发送消息 并跳出循环
  62. message.what =0x110;
  63. mHandler.sendMessage(message);
  64. break;
  65. }
  66. }
  67. }
  68. //具体执行 并返回进度的方法
  69. private int doWork()
  70. {
  71. //进度条随机加进度
  72. mProgress +=Math.random()*;
  73. try {
  74. //进程休眠0.5秒
  75. Thread.sleep();
  76. } catch (InterruptedException e) {
  77. e.printStackTrace();
  78. }
  79. return mProgress;
  80. }
  81. }).start(); //启动进程
  82. }
  83. }

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. Linux下socket编程基本知识

    本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...

  2. ip 地址库 这个 准么 呢

  3. 创建dynamics CRM client-side (五) - 使用regular expression (正则表达式)来检查phone number

    我们这次要使用account, 让我们首先重建一个JavaScript. 建议每个entity都创建专属的js // Converting functions to Namespace Notatio ...

  4. Liunx(centos8)下的yum的基本用法和实例

    yum 命令 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的 ...

  5. swift开发度假计划app

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

  6. Codeforces Round #617 (Div. 3)F. Berland Beauty

    题意: 给一棵树,边权未知,现在给m组约束,每组约束给出从u到v路径中的最小值,现在让你给出一组边权,使得符合之前的约束,不能给出输出-1 思路: 因为n较小,对于每组约束我们可以直接暴力修改路径上的 ...

  7. java 排序算法分析

    一.冒泡排序(时间复杂度O(N^2)) public int[] bubbling(int[] arr){ ) return arr; ; i--){ 1 ; j < i-; j ++){ 2 ...

  8. 外网通过frp进行windows远程文件共享

    需求 远程访问位于内网中的文件.例如,家里,公司内. 所需技术 frp windows文件共享 具有公网地址的服务器一台 实现过程 windows文件共享,首先自己在局域网内实现.这不是本文重点. 公 ...

  9. JSP-导入taglib 出现classNotFound异常

    案例 前端登录跳转到指定jsp,报classNoFoundException,原因是页面导入 <%@ taglib uri="http://java.sun.com/jsp/jstl/ ...

  10. Spring 依赖注入两种方式

    (1):通过 setter 方法注入: <property name=“ ” ></property> 其中,name属性的取值依setter方法名而定,要求这个类里面这个对应 ...