Android界面编程之六 第五组UI组件:ProgressBar及其子类
来源:互联网 发布:大专转行数据分析师 编辑:程序博客网 时间:2024/06/04 19:22
ProgressBar本身代表了进度条组件,它还派生了两个常用组件:SeekBar和RatingBar。
它和其子类在用法上十分相似,只是显示界面上有区别
2.6.1 ProgressBar的功能与用法
Android支持几种风格的进度条,通过style属性可以为ProgressBar指定风格。其支持的属性有:
@android:syle/Widget.ProgressBar.Horizontal
水平进度条
@android:syle/Widget.ProgressBar.Inverse
普通大小的环形进度条
@android:syle/Widget.ProgressBar.Large
大环形进度条
@android:syle/Widget.ProgressBar.Large.Inverse
大环形进度条
@android:syle/Widget.ProgressBar.Small
小环形进度条
@android:syle/Widget.ProgressBar.Small.Inverse
小环形进度条
除此之外,ProgressBar还支持如下常用XML属性:
android:max
设置该进度条的最大值
android:progress
设置该进度条的已完成进度
android:progressDrawable
设置该进度条的轨道对应的Drawable对象
android:indeterminate
若设为true,则进度条为不精确显示进度
android:indeterminateDrawable
设置绘制不显示进度条的Drawable对象
android:indeterminateDuration
设置不精确显示进度条的持续时间
android:progressDrawable用于指定进度条的轨道绘制形式,该属性可指定为一个LayerDrawable对象的引用(该对象可通过在XML文件中用<layer-list元素进行配置>)
setProgress(int)设置进度的完成百分比
incrementProgressBy(int)
设置进度条的进度增加或减少(正负以区分)
示例代码:
publicclassMainActivity extends Activity {
privateint[]data= new int[100];
inthasData= 0;
intstatus= 0;
ProgressBar bar,bar2;
Handler mHandler = new Handler()
{
@Override
publicvoidhandleMessage(Message msg)
{
if(msg.what== 0x11)
{
bar.setProgress(status);
bar2.setProgress(status);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar = (ProgressBar) findViewById(R.id.bar);
bar2 = (ProgressBar) findViewById(R.id.bar2);
//thread to process
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;
privateint[]data= new int[100];
inthasData= 0;
intstatus= 0;
ProgressBar bar,bar2;
Handler mHandler = new Handler()
{
@Override
publicvoidhandleMessage(Message msg)
{
if(msg.what== 0x11)
{
bar.setProgress(status);
bar2.setProgress(status);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar = (ProgressBar) findViewById(R.id.bar);
bar2 = (ProgressBar) findViewById(R.id.bar2);
//thread to process
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;
}
}
main.xml代码:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<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="wrap_content"
android:layout_height="wrap_content"
android:text="Progress of completion."/>
<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"/>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<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="wrap_content"
android:layout_height="wrap_content"
android:text="Progress of completion."/>
<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>
my_bar.xml代码;
<?xmlversion="1.0"encoding="utf-8"?>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:id="@android:id/background"
android:drawable="@drawable/no"/>
<itemandroid:id="@android:id/progress"
android:drawable="@drawable/ok"/>
<layer-listxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:id="@android:id/background"
android:drawable="@drawable/no"/>
<itemandroid:id="@android:id/progress"
android:drawable="@drawable/ok"/>
</layer-list>
还有一种进度条,可以直接在标题上显示进度,这种进度条甚至不需要ProgressBar,它直接由Activity启用,使用步骤如下:
1.调用Activity的requestWindowFeature()方法
2.setProgressBarVisibility(boolean)或者setProgressBarIndeterminateVisibility(boolean)方法控制显示和隐藏
示例代码如下:
publicclassMainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//progress bar on title
requestWindowFeature(Window.FEATURE_PROGRESS);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_main);
Button bn1 = (Button) findViewById(R.id.bn1);
Button bn2 = (Button) findViewById(R.id.bn2);
bn1.setOnClickListener(newOnClickListener()
{
@Override
public void onClick(View source)
{
setProgressBarIndeterminateVisibility(true);
setProgressBarVisibility(true);
setProgress(4500);
}
});
bn2.setOnClickListener(newOnClickListener()
{
@Override
public void onClick(View source)
{
setProgressBarIndeterminateVisibility(false);
setProgressBarVisibility(false);
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//progress bar on title
requestWindowFeature(Window.FEATURE_PROGRESS);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_main);
Button bn1 = (Button) findViewById(R.id.bn1);
Button bn2 = (Button) findViewById(R.id.bn2);
bn1.setOnClickListener(newOnClickListener()
{
@Override
public void onClick(View source)
{
setProgressBarIndeterminateVisibility(true);
setProgressBarVisibility(true);
setProgress(4500);
}
});
bn2.setOnClickListener(newOnClickListener()
{
@Override
public void onClick(View source)
{
setProgressBarIndeterminateVisibility(false);
setProgressBarVisibility(false);
}
});
}
}
2.6.2 SeekBar的功能和用法 (拖动条)
SeekBar继承了ProgressBar,故ProgressBar所支持的XML属性和方法适用于SeekBar
SeekBar允许用户改变拖动条的滑块外观,改变滑块外观通过如下属性来指定:
android:thumb 指定一个Drawable对象,作为自定义滑块
2.6.3 RatingBar的功能和用法(星级评分条)
星级评分条与拖动条有相同的父类:AbsSeekBar
唉3是android:isIndicator
设置该星级评分条是否允许用户改变(true为不允许修改)
android:numStars
共有多少星级android:rating
默认评分星级android:stepSize
每次需要改变多少个星级
为了让程序响应星级评分条的改变,程序可为其绑定一个OnRatingBarChangeListenter监听器
示例代码:
publicclassMainActivity extends ActionBarActivity {
RatingBar ratingBar;
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ratingBar = (RatingBar) findViewById(R.id.rating);
image = (ImageView) findViewById(R.id.iamge);
ratingBar.setOnRatingBarChangeListener(newOnRatingBarChangeListener()
{
@Override
public void onRatingChanged(RatingBar arg0,floatrating, boolean fromUser)
{
image.setAlpha((int)(rating * 255/5));
}
});
RatingBar ratingBar;
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ratingBar = (RatingBar) findViewById(R.id.rating);
image = (ImageView) findViewById(R.id.iamge);
ratingBar.setOnRatingBarChangeListener(newOnRatingBarChangeListener()
{
@Override
public void onRatingChanged(RatingBar arg0,floatrating, boolean fromUser)
{
image.
}
});
}
xml代码:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/iamge"
android:layout_width="match_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"
/>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/iamge"
android:layout_width="match_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>
0 0
- Android界面编程之六 第五组UI组件:ProgressBar及其子类
- Android界面编程之三 第二组UI组件:TextView及其子类
- Android界面编程之四 第三组UI组件:ImageView及其子类
- Android界面编程之五 第四组UI组件:AdapterView及其子类
- Android界面编程之七 第六组UI组件:ViewAnimator及其子类
- android-UI组件(五):ProgressBar及其子类
- 【android_温故知新】第 5 组 UI 组件:ProgressBar 及其子类
- 第5组UI组件:ProgressBar及其子类
- UI组件:进度条ProgressBar及其子类
- Android应用的界面编程:ProgressBar及其子类[SeekBar、RatingBar]
- UI组件之 ProgressBar及其子类(一)ProgressBar进度条的使用
- UI组件之AdapterView及其子类(六)ExpandableListView组件和ExpandableListActivity的使用
- UI组件之TextView及其子类
- Android学习笔记(24):进度条组件ProgressBar及其子类
- UI组件之ProgressBar及其子类(二)SeekBar拖动条和RatingBar星级评分条的使用
- 安卓UI控件-ProgressBar及其子类
- Android之ProgressBar及其子类SeekBar和RatingBar(一)
- UI组件:TextView及其子类
- 原子性操作atomic_t
- Android界面编程之四 第三组UI组件:ImageView及其子类
- POJ 1308 Is It A Tree? (并查集)
- Android界面编程之五 第四组UI组件:AdapterView及其子类
- 动态增大的栈
- Android界面编程之六 第五组UI组件:ProgressBar及其子类
- HDU 2614 DFS
- Dot Net 使用 itextsharp 类库创建PDF文件
- mybatis入门教程
- Android界面编程之七 第六组UI组件:ViewAnimator及其子类
- 初识Linux
- Android界面编程之八 各种杂项组件
- Android界面编程之九 对话框
- poj 1221 dp(UNIMODAL PALINDROMIC DECOMPOSITIONS)