【android_温故知新】第 5 组 UI 组件:ProgressBar 及其子类
来源:互联网 发布:期货仓位 知乎 编辑:程序博客网 时间:2024/05/18 06:53
- 进度条 ProgressBar 的功能与用法
- ProgressBar 支持的常用 XML 属性
- 实例显示在标题上的进度条
- 温馨提示
- 拖动条 SeekBar 的功能与用法
- 温馨提示
- 实例通过拖动滑块来改变图片的透明度
- 星级评分条 RatingBar 的功能与用法
- RatingBar 支持的常见 XML 属性
- 实例通过星级改变图片的透明度
进度条( ProgressBar )的功能与用法
Android 支持多种风格进度条,通过 style 属性可以为 ProgressBar 指定风格。该属性可支持如下几个属性值。
1. @android : style/Widget.ProgressBar.Horizontal : 水平进度条。
2. @android : style/Widget.ProgressBar.Inverse : 普通大小的环形进度条。
3. @android : style/Widget.ProgressBar.Large : 大环形进度条。
4. @android : style/Widget.ProgressBar.Large.Inverse : 大环形进度条。
5. @android : style/Widget.ProgressBar.Small : 小环形进度条。
6. @android : style/Widget.ProgressBar.Small.Inverse : 小环形进度条。
ProgressBar 支持的常用 XML 属性
android:progressDrawable 用于指定进度条的轨道的绘制形式,该属性可指定为一个 LayerDrawable 对象(该对象可通过 XML 文件中用< layer-list >元素进行配置)的引用。
ProgressBar 提供了如下方法来操作进度。
1. setProgress(int) : 设置进度的完成百分比。
2. incrementProgressBy(int) : 设置进度条的进度增加或减少。当参数为正数时进度增加;当参数为负数时进度减少。
下面的程序简单地示范了进度条的用法。该程序的界面布局文件只是定义了几个简单地进度条,并指定了 style 属性为@android:style/Widget.ProgressBar.Horizontal,即水平进度条。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 定义一个大环形进度条 --> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Large"/> <!-- 定义一个中等大小的环形进度条 --> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content"/> <!-- 定义一个小环形进度条 --> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="@android:style/Widget.ProgressBar.Small"/> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="任务完成的进度"/> <!-- 定义一个水平进度条 --> <ProgressBar android:id="@+id/bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" style="@android:style/Widget.ProgressBar.Horizontal"/> <!-- 定义一个水平进度条,并改变轨道外观 --> <ProgressBar android:id="@+id/bar2" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progressDrawable="@drawable/my_bar" style="@android:style/Widget.ProgressBar.Horizontal"/></LinearLayout>
<?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 MainActivity 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; }}
实例:显示在标题上的进度条
此类进度条可以直接在窗口标题上显示,这种进度条甚至不需要使用 ProgressBar 组件,它是直接由 Activity 的方法启用的。为了在窗口标题上显示进度条,需要经过如下两步。
1. 调用 Activity 的 requestWindowFeature()方法,该方法根据传入的参数可启用特定的窗口特征。例如,传入 Window.FEATURE_INDETERMINATE_PROGRESS 在窗口标题上显示不带进度的进度条、传入Window.FEATURE_PROGRESS 则显示带进度的进度条。
2. 调用 Activity 的 setProgressBarVisibility(boolean) 或 setProgressBarIndeterminateVisibility(boolean)方法即可控制进度条的显示和隐藏。
public class MainActivity 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); } }); }}
上面程序中的①号代码控制窗口标题上显示带进度的进度条,而②号代码则控制窗口标题上显示不带进度的进度条。程序中两个按钮主要用于控制进度条的显示、隐藏。
温馨提示
Android 5.0 默认的主题:Material(Android 5.0 的重要更新之一就是采用了 Material Design),而这个默认主题将看不到标题上的进度条。因此,本实例在 AndroidManifest.xml 文件中将该应用的主题设为 Holo。
拖动条( SeekBar )的功能与用法
拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则通过滑块的位置来表示数值 —- 而且拖动条允许用户拖动滑块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如调节音量等。
温馨提示
由于拖动条 SeekBar 继承了 ProgressBar,因此 ProgressBar 所支持的 XML 属性和方法完全适用于 SeekBar。
SeekBar 允许用户改变拖动条的滑块外观,改变滑块外观通过如下属性指定。
1.android:thumb : 指定一个 Drawable 对象,该对象将作为自定义滑块。
实例:通过拖动滑块来改变图片的透明度
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="240dp" android:src="@drawable/lijiang"/> <!-- 定义一个拖动条,并改变它的滑块外观 --> <SeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="255" android:progress="255" android:thumb="@drawable/ic_launcher"/></LinearLayout>
public class MainActivity 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.setImageAlpha(progress); } @Override public void onStartTrackingTouch(SeekBar bar) { } @Override public void onStopTrackingTouch(SeekBar bar) { } }); }}
星级评分条( RatingBar )的功能与用法
星级评分条与拖动条有相同的弗雷:AbsSeekBar,因此它们十分相似。实际上星级评分条与拖动条的用法、功能都十分接近:它们都允许用户通过拖动来改变进度。RatingBar 与 SeekBar 的最大区别在于:RatingBar 通过星星来表示进度。
RatingBar 支持的常见 XML 属性
实例:通过星级改变图片的透明度
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="240dp" 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 MainActivity 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.setImageAlpha((int) (rating * 255 / 5)); } }); }}
- 【android_温故知新】第 5 组 UI 组件:ProgressBar 及其子类
- 【android_温故知新】第 2 组 UI 组件:TextView及其子类
- 【android_温故知新】第 3 组 UI 组件:ImageView 及其子类
- 【android_温故知新】第 4 组 UI 组件:AdapterView 及其子类
- 【android_温故知新】第 6 组 UI 组件:ViewAnimator 及其子类
- 第5组UI组件:ProgressBar及其子类
- 【android_温故知新】第 1 组 UI 组件:布局管理器
- UI组件:进度条ProgressBar及其子类
- android-UI组件(五):ProgressBar及其子类
- 第2组UI组件:TextView及其子类
- 第3组UI组件:ImageView及其子类
- 第4组UI组件:AdapterView及其子类
- Android界面编程之六 第五组UI组件:ProgressBar及其子类
- UI组件之 ProgressBar及其子类(一)ProgressBar进度条的使用
- 安卓UI控件-ProgressBar及其子类
- UI组件:TextView及其子类
- UI组件:ImageView及其子类
- UI组件:ViewAnimator及其子类
- Linux C 算法与数据结构 --二叉树
- Java回炉之泛型
- 车牌识别资料收集
- Mac OS X Java环境变量配置
- c语言2 printf
- 【android_温故知新】第 5 组 UI 组件:ProgressBar 及其子类
- Ubuntu15 安装VMware Tools
- 2010 水仙花
- Java回炉之集合框架
- 南阳ACM 题目8:一种排序 Java版
- 机器视觉开源代码集合
- Java基础——Java重点基础之IO流(二)
- 最小生成树prim(普里姆)算法
- 浅谈JS中的原型链