Android ProgressBar 控件使用
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 控件使用相关推荐
- Android ProgressBar控件
1. ProgressBar类 ProgressBar用于显示进度条,进度条有两种不同的样式,选择和水平,通过设置style来区分. 旋转进度条,有大.中.小三种样式. style="?an ...
- Android SeekBar控件
1. SeekBar类 SeekBar类是滑动条,用于进度控制.主要属性 max,指定滑动条的最大值 progress,指定滑动条的当前值 通过setOnSeekBarChangeListener(O ...
- Android RatingBar控件
1. RatingBar类 RatingBar类用于显示星条.主要属性 numStars,指定星星个数 rating,指定默认点亮的星星星星个数 stepSize,指定步进数,1,0.5是常用值 通过 ...
- Android 原生控件之三 ProgressBar
Android 原生控件之三 ProgressBar 相关 来源 开始 不确定的进度 确定的进度 XML属性 1.android:animationResolution 2.android:indet ...
- android控件使用大全,Android常见控件使用详解
本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...
- 一个Demo让你掌握Android所有控件
一个Demo让你掌握Android所有控件 原文:一个Demo让你掌握Android所有控件 本文是转载收藏,侵删,出处:"安卓巴士" 下面给出实现各个组件的源代码: 1 ...
- android 获取控件高度_安卓开发入门教程UI控件_ProgressBar
什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...
- Android神奇“控件”-----RemoteViews
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明 http://blog.csdn.net/wrg_20100512/article/details/53940485 好 ...
- Android开源控件收集整理
一 .基本控件 TextView HTextView 一款支持TextView文字动画效果的Android组件库.GitHub - hanks-zyh/HTextView: Animation eff ...
最新文章
- pyspark 读取本txt 构建RDD
- ARC中block块作为属性的使用笔记
- 用Telnet 来用smtp发邮件。。 send mail by SMTP server
- oracle连接满报错日志,Oracle归档日志满了导致Oracle连接(ORA-00257)报错处理
- 同步容器和并发容器的区别
- python科学计算教学_Python最好用的科学计算库:NumPy快速入门教程(二)
- 如何用Python做好友管理系统
- jQuery 常用API
- Bloombox:iPhone陶瓷底座,还能当花盆和扩音器
- 3D动画(CSS3)-animation
- [256个管理学理论]003.鳄鱼法则(Alligator Principle)
- PPT多张图片的融合插件
- win7没有计算机,Win7计算机上没有声音的解决方案
- 手把手带你实现QQ分享
- css 获取第N个子元素
- mysql insert 空字符报错
- 计蒜客-幼儿园买玩具(java实现)
- Java对二维数组进行排序
- 你应该知道的 纳什均衡,并且用 python 实现
- 人数统计技术客流统计分析系统