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;
    }
}
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"/>

</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-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);
        }
        });
    }
}

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));
        }
        });
    }
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"
       
/>
</LinearLayout>



















0 0
原创粉丝点击