1. 前言

进度条是UI界面中一种非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比,进度条可以动态的显示进度,因为避免长时间地执行某个耗时操作时,让用户感觉程序失去了响应,从而更好地提高用户界面的友好性。

进度条展示有两种:水平进度条  和  环形进度条 ,下文分别详细介绍。首先我们来看下进度条的相关属性介绍。

2. ProgressBar属性介绍

2.1 XML属性

 这里的andorid:progressDrawable用于指定进度条的轨道的绘制形式,该属性可以指定为一个LayerDrawble对象的引用(该对象可以在XML文件中使用<layer-list>元素来进行配置)。

android:indeterminateBehavior

定义当进度达到最大时,不确定模式的表现;该值必须为repeat或者cycle,repeat表示进度从0重新开始;cycle表示进度保持当前值,并且回到0
android:indeterminateDuration=“500”,每转一圈的时间,ms

2.2 API属性

当然ProgressBar也提供如下方法来操作进度条:

setProgress(int) //设置第一进度
setSecondaryProgress(int) //设置第二进度
getProgress() //获取第一进度
getSecondaryProgress() //获取第二进度
incrementProgressBy(int) //增加或减少第一进度, 当参数为正数时,进度条增加,当参数为负数时,进度条减少
incrementSecondaryProgressBy(int) //增加或减少第二进度
getMax() //获取最大进度

3. 水平进度条

在xml中引用有两种方式:

A为       style="?android:attr/progressBarStyleHorizontal"

B为       style="@android:style/Widget.ProgressBar.Horizontal"

查看B的源码,相关属性为:

    <style name="Widget.ProgressBar.Horizontal"><item name="indeterminateOnly">false</item><item name="progressDrawable">@drawable/progress_horizontal</item><item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal</item><item name="minHeight">20dip</item><item name="maxHeight">20dip</item><item name="mirrorForRtl">true</item></style>

上文中提到的progressDrawable就是水平进度条轨迹的显示Drawable。我们继续去看下progress_horizontal 的源码

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"><!-- 进度条的背景色--><item android:id="@android:id/background"><shape><corners android:radius="5dip" /><gradientandroid:startColor="#ff9d9e9d"android:centerColor="#ff5a5d5a"android:centerY="0.75"android:endColor="#ff747674"android:angle="270"/></shape></item><!-- 缓冲进度条的背景色--><item android:id="@android:id/secondaryProgress"><clip><shape><corners android:radius="5dip" /><gradientandroid:startColor="#80ffd300"android:centerColor="#80ffb600"android:centerY="0.75"android:endColor="#a0ffcb00"android:angle="270"/></shape></clip></item><!-- 下载过程中进度条的颜色--><item android:id="@android:id/progress"><clip><shape><corners android:radius="5dip" /><gradientandroid:startColor="#ffffd300"android:centerColor="#ffffb600"android:centerY="0.75"android:endColor="#ffffcb00"android:angle="270"/></shape></clip></item></layer-list>

上述代码就是一个 LayerDrawble图片,它是层次化的Drawable合集, 根元素为<layer-list> ,每一个item就是一个shape图片,最后一个item显示在最上层。

4. 圆形进度条

系统自带的圆形进度条,都是一直转圈状态,为不精确显示进度 默认android:indeterminate属性值为true 。

我们进去 android:style/Widget.ProgressBar.Large源码看下

 <style name="Widget.ProgressBar.Large"><item name="indeterminateDrawable">@drawable/progress_large_white</item><item name="minWidth">76dip</item><item name="maxWidth">76dip</item><item name="minHeight">76dip</item><item name="maxHeight">76dip</item></style>

就是一个indeterminateDrawable ,进去再看下代码:

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/spinner_white_76"android:pivotX="50%"android:pivotY="50%"android:framesCount="12"android:frameDuration="100" />

看看 spinner_white_76 这个图片:  是一个 rotate 动画效果。

1.  我们来修改一下系统圆形进度条的颜色,修改属性为:android:indeterminateTint="#ff0000"

源码注释:Tint to apply to the indeterminate progress indicator   翻译:就是给进度条着色

代码:

    <ProgressBarandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:indeterminateTint="#ff0000"/>

没加这句话是默认灰色圆形进度条, 加了之后就变成了红色圆形进度条。

2. 自定义转圈动画

    <ProgressBarandroid:id="@+id/progressbar2"android:layout_height="wrap_content"android:layout_width="wrap_content"android:indeterminateDrawable="@drawable/bg_loading"/>

bg_loading.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><item><rotateandroid:drawable="@drawable/loading"android:fromDegrees="0.0"android:pivotX="50.0%"android:pivotY="50.0%"android:toDegrees="359.0"android:repeatMode="reverse"/></item>
</layer-list>

loading.xml : 

5. 实例演示

我们来写一个水平进度条,模拟下载任务进度过程:

public class MainActivity extends AppCompatActivity {private ProgressBar horizontalProgress;private ProgressBar circleProgress;private Button startBtn;private TextView mTextView;private Handler mHandler = new Handler(){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);if(msg.what >= 100) {horizontalProgress.setProgress(100);mTextView.setText("下载完成");removeCallbacksAndMessages(null);return;}int progress = msg.what;horizontalProgress.setProgress(progress);mTextView.setText("下载进度:" + progress + "%");Message message = Message.obtain();int temp = progress + 4;message.what = temp;mHandler.sendMessageDelayed(message, 1000);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);horizontalProgress = findViewById(R.id.progressbar1);mTextView = findViewById(R.id.tv_progress);circleProgress = findViewById(R.id.progressbar2);startBtn = findViewById(R.id.start_download);}@Overrideprotected void onResume() {super.onResume();startBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Message msg = Message.obtain();msg.what = 1;mHandler.sendMessage(msg);startBtn.setClickable(false);}});}@Overrideprotected void onDestroy() {super.onDestroy();mHandler.removeCallbacksAndMessages(null);}

布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:layout_marginRight="8dp"android:gravity="center"android:orientation="vertical"><TextViewandroid:id="@+id/tv_progress"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="水平进度条"android:textSize="20sp" /><ProgressBarstyle="@android:style/Widget.ProgressBar.Horizontal"android:id="@+id/progressbar1"android:layout_height="15dp"android:layout_width="match_parent"android:progress="0"android:max="100"/><TextViewandroid:id="@+id/tv_progress2"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:layout_width="wrap_content"android:text="圆形进度条"android:textSize="20sp" /><ProgressBarandroid:id="@+id/progressbar2"android:layout_height="wrap_content"android:layout_width="wrap_content"android:indeterminateDrawable="@drawable/bg_loading"/><Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:id="@+id/start_download"android:textSize="20sp"android:text="开始下载"/>

演示效果图:

Android ProgressBar 控件使用相关推荐

  1. Android ProgressBar控件

    1. ProgressBar类 ProgressBar用于显示进度条,进度条有两种不同的样式,选择和水平,通过设置style来区分. 旋转进度条,有大.中.小三种样式. style="?an ...

  2. Android SeekBar控件

    1. SeekBar类 SeekBar类是滑动条,用于进度控制.主要属性 max,指定滑动条的最大值 progress,指定滑动条的当前值 通过setOnSeekBarChangeListener(O ...

  3. Android RatingBar控件

    1. RatingBar类 RatingBar类用于显示星条.主要属性 numStars,指定星星个数 rating,指定默认点亮的星星星星个数 stepSize,指定步进数,1,0.5是常用值 通过 ...

  4. Android 原生控件之三 ProgressBar

    Android 原生控件之三 ProgressBar 相关 来源 开始 不确定的进度 确定的进度 XML属性 1.android:animationResolution 2.android:indet ...

  5. android控件使用大全,Android常见控件使用详解

    本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...

  6. 一个Demo让你掌握Android所有控件

    一个Demo让你掌握Android所有控件 原文:一个Demo让你掌握Android所有控件 本文是转载收藏,侵删,出处:"安卓巴士"      下面给出实现各个组件的源代码: 1 ...

  7. android 获取控件高度_安卓开发入门教程UI控件_ProgressBar

    什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...

  8. Android神奇“控件”-----RemoteViews

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明 http://blog.csdn.net/wrg_20100512/article/details/53940485 好 ...

  9. Android开源控件收集整理

    一 .基本控件 TextView HTextView 一款支持TextView文字动画效果的Android组件库.GitHub - hanks-zyh/HTextView: Animation eff ...

最新文章

  1. pyspark 读取本txt 构建RDD
  2. ARC中block块作为属性的使用笔记
  3. 用Telnet 来用smtp发邮件。。 send mail by SMTP server
  4. oracle连接满报错日志,Oracle归档日志满了导致Oracle连接(ORA-00257)报错处理
  5. 同步容器和并发容器的区别
  6. python科学计算教学_Python最好用的科学计算库:NumPy快速入门教程(二)
  7. 如何用Python做好友管理系统
  8. jQuery 常用API
  9. Bloombox:iPhone陶瓷底座,还能当花盆和扩音器
  10. 3D动画(CSS3)-animation
  11. [256个管理学理论]003.鳄鱼法则(Alligator Principle)
  12. PPT多张图片的融合插件
  13. win7没有计算机,Win7计算机上没有声音的解决方案
  14. 手把手带你实现QQ分享
  15. css 获取第N个子元素
  16. mysql insert 空字符报错
  17. 计蒜客-幼儿园买玩具(java实现)
  18. Java对二维数组进行排序
  19. 你应该知道的 纳什均衡,并且用 python 实现
  20. 人数统计技术客流统计分析系统

热门文章

  1. 淘宝,拼多多,京东,大爷大妈上网购物最喜欢用哪个平台?
  2. python优雅的写法
  3. 服务器返回数据为空,服务器返回 成功的时候,没有任何数据的处理
  4. 腾讯安全2021年报告白皮书合集(附下载)
  5. update set from 语句用法
  6. 全连接层调参tricks
  7. 什么是异步拜占庭容错 (ABFT)?
  8. 惯用过程模型(process models)
  9. Linux安装Steam常见问题解决方法
  10. 计算机课前导学结题报告,【学案导学课题结题报告】 课题结题报告范文_课题结题报告模板_东城教研...