ProgressBar本身进度条组件,它派生了:SeekBar和RatingBar两个组件,他们的继承关系如下:

1、ProgressBar有两个进度,一个是android:progress,另一个是android:secondaryProgress。后者主要是为缓存需要所涉及的,比如在看网络视频时候都会有一个缓存的进度条以及还要一个播放的进度,在这里缓存的进度就可以是android:secondaryProgress,而播放进度就是android:progress,有了secondProgress,可以很方便定制ProgressBar。

2、ProgressBar分为确定的和不确定的,确定的是我们能明确看到进度,相反不确定的就是不清楚、不确定一个操作需要多长时间来完成,这个时候就需要用的不确定的ProgressBar了。属性android:indeterminate如果设置为true的话,那么ProgressBar就可能是圆形的滚动条或者水平的滚动条(由样式决定),但是我们一般时候,是直接使用Style类型来区分圆形还是水平ProgressBar的。

进度条的常用xml属性如下:

其中根据Style属性的设置不同,可以指定ProgressBar的3种环形进度条和1中水平进度条:

1,大环形进度条  style="?android:attr/progressBarStyleLarge或者style="?android:attr/progressBarStyleLargeInverse"

2,普通环形进度条:style="android:progressBarStyle"

3,小环形进度条:style="?android:attr/progressBarStyleSmall"

4,普通水平进度条:style=“?android:attr/progressBarStyleHorizontal”

常用属性解释:

android:max:设置进度条的最大值

android:progress:设置已完成进度条的进度值

android:progressDrawable:设置进度条轨道对应的Drawable对象。可以是一个LayerDrawable对象

android:indeterminate:设置属性是true,设置进度条不精确显示的进度,就是环形进度条的进度值

android:indeterminateDrawable:设置绘制不精确显示的精度的Drawable对象,就是环形进度的轨道Drawable对象;

android:indeterminateDuration;设置不精确显示精度的持续时间

mybar.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 设置轨道背景 --><item android:id="@android:id/background" android:drawable="@drawable/no"></item><!-- 设置轨道上已完成背景的样式 ,在上面--><item android:id="@android:id/progress" android:drawable="@drawable/ok"></item>
</layer-list>

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/root"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><!-- 大环形进度条  style="?android:attr/progressBarStyleLarge"--><ProgressBarandroid:id="@+id/progressBar1"style="?android:attr/progressBarStyleLargeInverse"android:layout_width="wrap_content"android:layout_height="wrap_content" /><!-- 普通的中等进度条 --><ProgressBarandroid:id="@+id/progressBar2"android:layout_width="wrap_content"android:layout_height="wrap_content" /><!-- 小环形进度条  style="?android:attr/progressBarStyleSmall"--><ProgressBarandroid:id="@+id/ProgressBar3"style="?android:attr/progressBarStyleSmall"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="任务完成的进度"android:textSize="20dp" /><!-- 普通的水平进度条 --><ProgressBarandroid:id="@+id/progressBar4"style="?android:attr/progressBarStyleHorizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:max="100"android:progress="0"android:visibility="visible" /><!-- 水平进度条,改变轨道外观 ,外观图片是在drawable里面,xml文件的layer-list元素编写--><ProgressBarandroid:id="@+id/progressBar5"style="?android:attr/progressBarStyleHorizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:max="100"android:paddingTop="20dp"android:progressDrawable="@drawable/mybar" /></LinearLayout>

MainActivity.java

package com.hust.progresbartest;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ProgressBar;public class MainActivity extends Activity {/*给程序模拟填充长度为100的数组*/private int[] data=new int[100];int hasData=0;//记录ProgressBar的完成进度int status=0;ProgressBar bar,bar2;//创建一个负责更新进度的HandlerHandler h=new Handler(){public void handleMessage(Message msg){if(msg.what==0x111){//进度条设置已完成的值bar.setProgress(status);bar2.setProgress(status);               }}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bar=(ProgressBar) findViewById(R.id.progressBar4);bar2=(ProgressBar) findViewById(R.id.progressBar5);//启动线程来执行任务new Thread(){public void run(){while(status<100){//获取耗时操作完成百分比status=dowork();//发送消息h.sendEmptyMessage(0x111);}}}.start();}//模拟一个耗时的操作public int dowork(){//为数组元素赋值data[hasData++]=(int)(Math.random()*100);try{Thread.sleep(100);}catch(InterruptedException e){e.printStackTrace();}return hasData;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

UI组件之 ProgressBar及其子类(一)ProgressBar进度条的使用相关推荐

  1. python progressbar 倒计时_Python使用progressbar模块实现的显示进度条功能

    本文实例讲述了Python使用progressbar模块实现的显示进度条功能.分享给大家供大家参考,具体如下: progressbar安装: pip install progressbar 用法一 # ...

  2. UI组件之TextView及其子类(二)RadioButton和CheckBox

    单选按钮(RadioButton)和复选框(CheckBox),状态开关按钮(ToggleButton),开关(Switch)都是普通的UI组件,都继承了Button类,因此都可以用Button的各种 ...

  3. ProgressBar(圆形、水平进度条)的基本使用(点击Button1按钮,显示或消失圆形ProgressBar)(每点击一次Button2按钮,水平进度条增加10%)

    ProgressBar用于在界面上显示一个进度条,表示我们的程序正在加载一些数据.它的用法也非常简单. 首先它有两种形式,一种是圆形进度条,另一种是水平进度条. 效果图: activity_main. ...

  4. AS如何设置ProgressBar宽度以及实现反向进度条

    AS中ProgressBar默认样式是从左往右并且和牙签一样细,在AS中没有直接的样式设置其宽度和进度条方向的,那么要想设置其宽度和方向的样式只能自定义了 .操作步骤如下: 实现宽度自定义: 先在AS ...

  5. UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用

    ExpandableListView是ListView的子类,他在ListView上进行了扩展,它把列表项分成了几组,每组里包含了多个列表项 ExpandableListView的列表项是由Expan ...

  6. UI组件之AdapterView及其子类(五)ListView组件和ListActivity

    ListView组件是一个显示组件,继承AdapterView基类,前面已经介绍了分别使用ArrayAdapter,SimpleAdapter,扩展BaseAdapter来为LisView提供列表项h ...

  7. UI组件之AdapterView及其子类(四)Gallery画廊控件使用

    听说 Gallery现在已经不使用了,API使用ViewPaper代替了,以后再学专研ViewPaper吧现在说说Gallery画廊,就是不停显示图片的意思 Gallery是用来水平滚动的显示一系列项 ...

  8. UI组件之AdapterView及其子类关系,Adapter接口及其实现类关系

    AdapterView本身是一个抽象基类,它派生的的子类在用法上十分相似.AdapterView直接派生的三个子类:AbsListView,AbsSpinner,AdapterViewAnimator ...

  9. UI组件之ImageView及其子类(一)ImageView显示图片

    ImageView家族的继承关系如图: ImageView继承自View组件,它的主要功能室显示图片,还可以显示Drawable对象. ImageView直接子类是ImageButton,QuickC ...

  10. UI组件之AdapterView及其子类(一)三种Adapter适配器填充ListView

    AdapterView的内容一般是包含多项相同格式资源的列表,常用的有5种AdapterView的子类: (1)ListView:简单的列表 (2)Spinner:下拉列表,给用户提供选择 (3)Ga ...

最新文章

  1. ACL 2021 最佳论文:最优运输理论开启词表学习新纪元
  2. UNIX下的环境变量--转载
  3. 【转】计算机中浮点数的表示
  4. 我对 ASP.NET Web API 的随想
  5. 稳居TIOBE前三,涨幅No.1,Python做了什么?
  6. 敏捷落地的会议和工具
  7. 用友数据库最新会计期间_6千左右预算,2021年Word/Excel/用友/ 金蝶/SQL数据库-财务会计轻薄笔记本推荐...
  8. QQ、空间、新浪微博、微信分享
  9. python html表格模版,python-如何使用模板(例如Jinja2)将列值列表呈现到表中
  10. cesium 漫游飞行_cesium 之三维漫游飞行效果实现篇(附源码下载)
  11. 三星android安卓版本怎么升级,大神教你三星S7如何更新安卓7.0 三星S7升级安卓7.0详细教程...
  12. 用spring MVC 生成Excel和PDF
  13. 对于如何长胖和减肥的研究
  14. Persistent Bugger 实践练习
  15. 1.8 30 分钟完成桌球小游戏项目
  16. python微信公众号翻译功能_10分钟教你用Python实现微信翻译机器人
  17. docker学习5-docker安装tomcat环境和部署war包
  18. Python-random函数用法
  19. sklearn机器学习:决策树tree.DecisionTreeClassifier()
  20. Cocos2d-x 3.0final手机游戏开发视频教程2014 - 自学编程 -(陆续更新中)

热门文章

  1. stm32f103c8t6芯片IAP升级填坑记
  2. 波卡链Substrate (7)Babe协议六“Secondary slot leader”
  3. 区块链BaaS云服务概念简述
  4. Kubernetes安全之认证
  5. 【Opencv实战】图像修复神技?看我一秒修复家里的老照片
  6. buu rsarsa
  7. Tengine怎么去安装第三方模块、以及安装源码中的模块
  8. 【django】路由传递参数
  9. learn-the-architecture系列
  10. TEEC_RegisterSharedMemory和TEEC_AllocateSharedMemory的区别