天天看点

Android中ProgressBar进度条

在某项延续性工作的进展过程中为了不让用户觉得程序失去响应,需要有个活动的进度条,表示此过程正在进行中,从而更友好的提高了用户的界面的友好性。

在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。

XML重要属性与ProgressBar方法

@android:style/Widget.ProgressBar.Horizontal:水平进度条
@android:style/Widget.ProgressBar.Inverse:普通大小的进度的环形条
@android:style/Widget.ProgressBar.Large
@android:style/Widget.ProgressBar.Small
android:max:设置该进度条的最大值
android:progress:设置该进度条的已完成进度
android:progressDrawable:设置该进度条的轨道对应的Drawabled对象
android:indeterminate():指示进度条是否在不确定模式下,值为true
android:indeterminateDrawable:设置绘制不显示进度的进度条的Drawable对象
android:indeterminateDuration:设置不精确显示进度的持续时间      

样式:

Android中ProgressBar进度条

XML布局文件:

<?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" >
    <!-- 定义一个大环形进度条 -->
    <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"/>
    <ProgressBar 
        android:id="@+id/bar1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="100"
        style="@android:style/Widget.ProgressBar.Horizontal"/>
    <ProgressBar 
        android:id="@+id/bar2"
        android:max="100"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:progressDrawable="@drawable/my_bar"
        style="@android:style/Widget.ProgressBar.Horizontal"/>
</LinearLayout>      

Drawable对象的布局文件:

<?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.progressbardemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
  final static int count = 100;
  int loc = 0;//记录当前完成进度
  ProgressBar bar1,bar2;
  Handler myhHandler = new Handler(){
    @Override
    public void handleMessage(Message msg){
      if(msg.what == 101){
        bar1.setProgress(loc);
        bar2.setProgress(loc);
      }
    }
  };
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    bar1 = (ProgressBar) findViewById(R.id.bar1);
    bar2 = (ProgressBar) findViewById(R.id.bar2);
    new Thread(){
      public void run(){
        while(loc<count){
          int l = loc;
          loc = work(l);
          myhHandler.sendEmptyMessage(101);
        }
      }
    }.start();
  }
  /**
   * 创建一个耗时的操作
   * */
  public int work(int l){
    l++;
    try {
      Thread.sleep(100);
    } catch (Exception e) {
      // TODO: handle exception
    }
    return l;
  }
}