UI组件:进度条ProgressBar及其子类
来源:互联网 发布:全世界网络设墙的国家 编辑:程序博客网 时间:2024/06/05 10:37
ProgressBar本身代表了进度条组件,它还派生出了两个常用组件:SeekBar和RatingBar。
进度条(ProgressBar)的功能和用法
Android支持几种风格的进度条,通过style属性可以为ProgressBar指定风格。该属性可以支持如下几个属性值。
@android:style/Widget.ProgressBar.Horizontal : 水平进度条
@android:style/Widget.ProgressBar.Inverse : 普通大小的环形进度条
@android:style/Widget.ProgressBar.Large : 大环形进度条
@android:style/Widget.ProgressBar.Large.Inverse : 大环形进度条
@android:style/Widget.ProgressBar.Small : 小环形进度条
@android:style/Widget.ProgressBar.Small.Inverse : 小环形进度条
ProgressBar提供了如下方法来操作进度条:
setProgress(int) : 设置进度条的完成百分比
incrementProgressBy(int) : 设置进度条的进度增加或减少。当参数为正数时进度条增加,为负数时,进度条减小。
下面定义了几个简单的进度条,布局文件代码如下所示:
<?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="match_parent" android:layout_marginTop="10dp" android:orientation="vertical"> <!--水平进度条--> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Horizontal"/> <!--水平进度条,并改变轨道外观--> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Horizontal" android:progressDrawable="@drawable/my_bar"/> <!--普通大小的环形进度条--> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Inverse"/> <!--大环形进度条--> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Large.Inverse"/> <!--小环形进度条--> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Small.Inverse"/></LinearLayout>
android:progressDrawable属性用于指定进度条的轨道绘制形式,该属性可以指定为一个LayerDrawable对象。
上面代码中android:progressDrawable的属性值@drawable/my_bar对应的代码如下所示 :
<?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 android:id="@android:id/progress" android:drawable="@drawable/ok"/></layer-list>
下面的程序用一个填充数组的任务模拟耗时任务,并以进度条来标识任务的完成百分比,主程序代码如下:
package com.example.administrator.progressbarinfo;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.widget.ProgressBar;public class MainActivity extends AppCompatActivity { //改程序模拟填充长度为100的数组 private int[] data = new int[100]; private int hasData = 0; //记录进度条的完成进度 private int status = 0; private ProgressBar bar1,bar2; //创建一个负责更新进度的Handler private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what==0x111){ bar1.setProgress(status); bar2.setProgress(status); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bar1 = (ProgressBar) findViewById(R.id.bar1); bar2 = (ProgressBar) findViewById(R.id.bar2); //启动线程来执行任务 new Thread(){ @Override public void run() { while(status<100){ //获取耗时操作的完成百分比 status = doWork(); //发送消息 mHandler.sendEmptyMessage(0x111); } } }.start(); } /** * 模拟一个耗时操作 * @return */ private int doWork() { //为数组元素赋值 data[hasData++] = (int)(Math.random()*100); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } return hasData; }}
程序效果如下所示:
拖动条(SeekBar)
SeekBar允许用户改变拖动条的滑块外观,改变滑块外观通过如下属性来指定。
android:thumb : 指定了一个Drawable对象,该对象将作为自定义滑块。
为了响应拖动条滑块位置的改变,可为拖动条绑定一个OnSeekBarChangeListenter监听器。
星级评分条(RatingBar)
下面的实例通过星级评分条改变图片的透明度。
布局文件代码如下所示:
<?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="match_parent" android:orientation="vertical"> <RatingBar android:id="@+id/rating_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:rating="5" android:max="1" android:progress="1" android:stepSize="0.5"/> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/lijiang"/></LinearLayout>
主程序代码如下:
public class RatingBarActivity extends AppCompatActivity { private ImageView imageView; private RatingBar ratingBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rating_bar); imageView = (ImageView) findViewById(R.id.image); ratingBar = (RatingBar) findViewById(R.id.rating_bar); ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { //当星级评分条的位置发生改变时触发该方法 @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { //改变图片的透明度 //每个星星的最大值为1,5个星星的最大值为5,星级评分条的最小变化为0.5,也就是每次改变半颗星星 imageView.setAlpha(rating/5); } }); }}
效果如下所示:
- UI组件:进度条ProgressBar及其子类
- UI组件之 ProgressBar及其子类(一)ProgressBar进度条的使用
- Android学习笔记(24):进度条组件ProgressBar及其子类
- android-UI组件(五):ProgressBar及其子类
- 【android_温故知新】第 5 组 UI 组件:ProgressBar 及其子类
- 第5组UI组件:ProgressBar及其子类
- 安卓UI控件-ProgressBar及其子类
- Android界面编程之六 第五组UI组件:ProgressBar及其子类
- UI组件:TextView及其子类
- UI组件:ImageView及其子类
- UI组件:ViewAnimator及其子类
- UI组件:TextView及其子类
- jQuery Easy UI ProgressBar(进度条)组件
- UI组件之ProgressBar及其子类(二)SeekBar拖动条和RatingBar星级评分条的使用
- UI组件之TextView及其子类
- ProgressBar及其子类
- ProgressBar 进度条组件封装
- 进度条组件:ProgressBar
- Linux之—网络通信(进程和线程实现并发通信)
- 用C#实现对数组元素排序(Array.Sort)方法
- AndroidManifest.xml file missing解决办法
- Spark Sql
- Linux网编编程函数的补充以及举例
- UI组件:进度条ProgressBar及其子类
- Active Learning 主动学习
- org/apache/commons/lang/xwork/StringUtils
- App软件开发流程优化
- 将顺序表中的所有元素逆置
- 冒泡排序
- FragmentPagerAdapter和ViewPager实现滑动切换
- 初学mysql(八)-数据库之触发器
- 【洛谷 1613】跑路