通常用于向用户显示某个耗时操作完成的百分比。
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常用的XML属性和方法】
android:max 设置该进度条的最大值
android:progress 设置该进度条的已完成进度值
android:progressDrawable 设置该进度条的轨道对应的Drawable对象
android:indeterminate 该属性设为true,设置进度条不精确显示进度
android:indeterminateDrawable 设置绘制不显示进度的进度条的Drawable对象
android:indeterminateDuration 设置不精确显示进度的持续时间

getMax():返回这个进度条的范围的上限。
getProgress():返回进度。
getSecondaryProgress():返回次要进度。
incrementProgressBy(int diff):指定增加的进度或减少(+进度增加,-进度减少)。
isIndeterminate():指示进度条是否在不确定模式下。
setIndeterminate(boolean indeterminate):设置不确定模式下。
setVisibility(int v):设置该进度条是否可视。

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

范例:进度条各种样式。

 <?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" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<!-- 定义一个大环形进度条 -->
<ProgressBar
style="@android:style/Widget.ProgressBar.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 定义一个中等大小的环形进度条 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 定义一个小环形进度条 -->
<ProgressBar
style="@android:style/Widget.ProgressBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout> <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="任务完成的进度" /> <!-- 定义一个水平进度条 -->
<ProgressBar
android:id="@+id/bar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100" />
<!-- 定义一个水平进度条,并改变轨道外观 -->
<ProgressBar
android:id="@+id/bar2"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:progressDrawable="@drawable/my_bar" />
</LinearLayout>

其中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>
 public class ProgressBarTest extends Activity {
// 该程序模拟填充长度为100的数组
private int[] data = new int[100];
int hasData = 0;
// 记录ProgressBar的完成进度
int status = 0;
ProgressBar bar, bar2;
// 创建一个负责更新的进度的Handler
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 表明消息是由该程序发送的
if (msg.what == 0x111) {
bar.setProgress(status);
bar2.setProgress(status);
}
}
}; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bar = (ProgressBar) findViewById(R.id.bar);
bar2 = (ProgressBar) findViewById(R.id.bar2); // 启动线程来执行任务
new Thread() {
public void run() {
while (status < 100) {
// 获取耗时操作的完成百分比
status = doWork();
// 发送消息
mHandler.sendEmptyMessage(0x111);
}
}
}.start();
} // 模拟一个耗时的操作
public int doWork() {
// 为数组元素赋值
data[hasData++] = (int) (Math.random() * 100);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return hasData;
}
}

范例:显示在标题上的进度条
1) 调用Activity的requestWindowFeature(),该方法根据传入的参数可启用特定的窗口特征,例如
传入Window.FEATURE_INDETERMINATE_PROGRESS在窗口标题上显示不带进度的进度条;传入
Window.FEATURE_PROGRESS则显示带进度的进度条。
2) 调用Activity的setProgressBarVisibility(boolean)setProgressBarIndeterminateVisibility(boolean)
即可控制进度条的显示和隐藏。

public class TitleProgressBar extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// //设置窗口特征:启用显示进度的进度条
// requestWindowFeature(Window.FEATURE_PROGRESS); //①
// 设置窗口特征:启用不显示进度的进度条
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); // ②
setContentView(R.layout.main);
Button bn1 = (Button) findViewById(R.id.bn1);
Button bn2 = (Button) findViewById(R.id.bn2);
bn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View source) {
// 显示不带进度的进度条。
setProgressBarIndeterminateVisibility(true);
// 显示带进度的进度条。
setProgressBarVisibility(true);
// 设置进度条的进度
setProgress(4500);
}
});
bn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View source) {
// 隐藏不带进度的进度条。
setProgressBarIndeterminateVisibility(false);
// 隐藏带进度的进度条。
setProgressBarVisibility(false
);
}
});

}
}

===== 拖动条(SeekBar)的功能和用法 =====
# 拖动条是通过滑块的位置来标识数值,而且拖动条允许用户拖动滑块来改变值,比如:调节音量等。
# 由于SeekBar继承了ProgressBar,因此ProgressBar所支持的XML属性和方法完全适用于SeekBar。
# android:thumb:指定一个Drawable对象,该对象将作为自定义滑块,改变拖动条的滑块外观。
# 为了让程序能响应拖动条滑块位置的改变,程序可以考虑为它绑定一个OnSeekBarChangeListener监听器。

范例:通过拖动滑块来改变图片的透明度

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="240px"
android:src="@drawable/lijiang" />
<!-- 定义一个拖动条,并改变它的滑块外观 -->
<SeekBar
android:id="@+id/seekbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="255"
android:progress="255"
android:thumb="@drawable/ic_launcher" />
</LinearLayout>
 public class SeekBarTest extends Activity {
ImageView image; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView) findViewById(R.id.image);
SeekBar seekBar = (SeekBar) findViewById(R.id.seekbar); seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
// 当拖动条的滑块位置发生改变时触发该方法
@Override
public void onProgressChanged(SeekBar arg0, int progress,
boolean fromUser) {
// 动态改变图片的透明度
image.setAlpha(progress);
}
@Override
public void onStartTrackingTouch(SeekBar bar) {
}
@Override
public void onStopTrackingTouch(SeekBar bar) {
}
});
}
}

===== 星级评分条(RatingBar)的功能和用法 =====

# RatingBar与SeekBar最大区别在于:RatingBar通过星星来表示进度。

【RatingBar支持的常见XML属性】
android:rating 设置该星级评分条默认的星级
android:numStars 设置该星级评分条总共有多少个星级
android:stepSize 设置每次最少需要改变多少个星级
android:isIndicator 设置该星级评分条是否允许用户改变(true为不允许修改)

为了让程序能相应星级评分的改变,程序可以考虑为它绑定一个OnRatingBarChangeListener监听器。

范例:通过星级改变图片的透明度

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="240px"
android:src="@drawable/lijiang" />
<!-- 定义一个星级评分条 -->
<RatingBar
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:max="255"
android:progress="255"
android:stepSize="0.5" />
</LinearLayout>
 public class RatingBarTest extends Activity {
ImageView image; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView) findViewById(R.id.image);
RatingBar ratingBar = (RatingBar) findViewById(R.id.rating); ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
// 当拖动条的滑块位置发生改变时触发该方法
@Override
public void onRatingChanged(RatingBar arg0, float rating,
boolean fromUser) {
// 动态改变图片的透明度,其中255是星级评分条的最大值
// 5个星星就代表最大值255
image.setAlpha((int) (rating * 255 / 5));
}
});
}
}

由于上面定义RatingBar时指定了android:stepSize="0.5",因此该星级评分条中星级的最小变化为0.5,也就是

最少要变化半个星级。

【改变样式】其中XML属性 style="@style/roomRatingBar"的样式如下:

styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="roomRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/room_rating_bar</item>
<item name="android:minHeight">16dip</item>
<item name="android:maxHeight">16dip</item>
</style>
</resources>

上面的意思是继承@android:style/Widget.RatingBar,重写android:progressDrawable属性,换成我们自定义@drawable/room_rating_bar文件。

控制该组件的最大和最小高度。好我们继续去找这自定义文件@drawable/room_rating_bar。

room_rating_bar.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/room_unselect" />
<item android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/room_unselect" />
<item android:id="@+android:id/progress"
android:drawable="@drawable/room_select" />
</layer-list>

二、Android应用的界面编程(六)ProgressBar及其子类[SeekBar、RatingBar]er的更多相关文章

  1. 物联网大赛 - Android学习笔记(二)Andriod 应用界面编程

    学习目标: Android的程序界面和View组件 View组件和ViewGroup组件 常见的布局管理器 文本框组件TextView和EditView 按钮组件Button 和ImageButton ...

  2. 二、Android应用的界面编程(七)ViewAnimator及其子类[ ViewSwitcher、ImageSwitcher、TextSwitcher、ViewFlipper ]

    ViewAnimator是一个基类,它继承了FrameLayout.因此它表现出FrameLayout的特征,可以将多个View组“叠”在一起. ViewAnimator可以在View切换时表现出动画 ...

  3. Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍

    一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...

  4. android应用的界面编程----View与ViewGroup的概念

    1 UI OverView Android中所有的UI元素都是通过View与ViewGroup来构建的,View是指屏幕中一块可与用户进行交互的空白,类似于java界面编程中的JPanel.为了界面布 ...

  5. 二、Android应用的界面编程(二)布局管理器

    一.线性布局所有布局都可以作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件.实际上,我们完全可以用一个布局管理器嵌套到其他布局管理器中---因为布局管理器也继承了View ...

  6. 二、Android应用的界面编程(一)界面编程与视图(View)组件

    Android应用的绝大部分UI组件都放在android.widget包及其子包.android.view包及其子包中,Android应用的所有UI组件都继承了View类.它代表一个空白的矩形区域.V ...

  7. android中的界面编程

    主要是用View以及ViewGroup,同时ViewGroup又是View的子类,充当容器. 主要有两种方法控制view的行为: 1.在XML布局文件中通过XML属性进行控制 2.在Java代码中通过 ...

  8. Android TV开发总结(六)构建一个TV app的直播节目实例

    请尊重分享成果,转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52966319 近年来,Android TV的迅速发展,传统的有线电视受 ...

  9. Android开发自学笔记(Android Studio)—4.5 ProgressBar及其子类

    一.前言 ProgressBar本身代表了进度条组件,它还派生出了两个常用的组件:SeekBar和RatingBar,他们的使用方法类似,只是显示界面有一定的区别.我们看一下API文档中的说明: 从图 ...

随机推荐

  1. 什么是HotSpot VM & 深入理解Java虚拟机 JVM

    参考 http://book.2cto.com/201306/25434.html 另外,这篇文章也是从一个系列中得出的: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> ...

  2. 《Linux性能及调优指南》----1.1 Linux进程管理

    翻译:飞哥 ( http://hi.baidu.com/imlidapeng ) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance ...

  3. ICA (独立成分分析)

    介绍 独立成分分析(ICA,Independent Component Correlation Algorithm)简介 X=AS X为n维观测信号矢量,S为独立的m(m<=n)维未知源信号矢量 ...

  4. 2017.7.1 nginx反向代理服务器域名解析配置(已验证可使用)

    下载地址:http://learning.happymmall.com/ 前提:ftpserver已经开启,并且设置为: 1.获得安装文件 2.修改配置文件 2.1 修改conf/nginx.conf ...

  5. Sending SMS And Dialing Numbers without User Consent(Context is not needed)

    Sending SMS And Dialing Numbers without User Consent Sending SMS does not require context or user in ...

  6. Python&lt;1&gt;List

    list里的元素以逗号隔开,以[]包围,当中元素的类型随意 官方一点的说:list列表是一个随意类型的对象的位置相关的有序集合. 它没有固定的大小(1).通过对偏移量 (2)进行赋值以及其它各种列表的 ...

  7. Solidworks 好的测试题模拟题

    题目:按照下图构建草图,注意设置必要的几何约束. 问题:   1.参照下图所示参数时请问其中绿色区域的面积为多少平方毫米?     题目:参照下图绘制草图轮廓,注意图中各线条之间均为相切过渡. 问题: ...

  8. mui 本地打包

    第一步:下载HBuilder离线打包Android版SDK 网址:http://ask.dcloud.net.cn/article/38 第二步:导入项目 启动带ADT的eclipse程序,菜单中选择 ...

  9. STL学习笔记(排序算法)

    STL提供了好几种算法对区间内的元素排序.出来完全排序外,还支持局部排序. 对所有元素排序 void sort(RandomAccessIterator beg,RandomAccessIterato ...

  10. 通过特定获取获取电脑外网IP地址

    void get_WanIp() { }; ]; ]; ; }; GetTempPathA(MAX_PATH,szFilePath); strcat(szFilePath,"IPinTheW ...