android 进度条(ProgressBar)

来源:互联网 发布:mpv mac 下载 编辑:程序博客网 时间:2024/04/26 14:58
  当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行、执行进度如何、应用程序是否遇到错误终止等,这时需要使用进度条来提示用户后台程序执行的进度。Android系统提供了两大类进度条样式,长形进度条(progress-BarStyleHorizontal) 
和圆形进度条(progressBarStyleLarge)。进度条用处很多,比如,应用程序装载资源和网络连接时,可以提示用户稍等,这一类进度条只是代表应用程序中某一部分的执行情况,而整个应用程序执行情况呢,则可以通过应用程序标题栏来显示一个进度条,这就需要先对窗口的显示风格进行设置"requestWindowFeature(Window.FEATURE_PROGRESS)"。 
   我们看看这个示例程序的 运行效果 

  
先上布局文件 
<?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" 
    > 
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 

<ProgressBar 
android:id="@+id/ProgressBar01" 
style="?android:attr/progressBarStyleHorizontal" 
android:layout_width="200dp" 
android:layout_height="wrap_content" 
android:visibility="gone" 
/> 

<ProgressBar 
android:id="@+id/ProgressBar02" 
style="?android:attr/progressBarStyleLarge" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:max="100" 
android:progress="50" 
android:secondaryProgress="70" 
android:visibility="gone" 
/> 

<Button 
android:id="@+id/Button01" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="开始"/> 

</LinearLayout> 
ProgressBar01 为长形进度条,Progress02为圆形进度条,标题栏进度条没有在这里声明。"style="表示设置进度条的风格。下面通过setMax方法设置进度条的最大值,setProgress 方法设置进度条的当前值,setVisibility 方法设置进度条的可见性。 

Java代码  收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.os.Message;  
  7. import android.view.View;  
  8. import android.view.Window;  
  9. import android.widget.Button;  
  10. import android.widget.ProgressBar;  
  11.   
  12. public class Activity01 extends Activity {  
  13.   
  14.     //声明ProgressBar对象  
  15.     private ProgressBar xh_ProgressBar;  
  16.     private ProgressBar xh_ProgressBar2;  
  17.     private Button xh_Button;  
  18.     protected static final int GUI_STOP_NOTIFIER = 0x108;  
  19.     protected static final int GUI_THREADING_NOTIFIER = 0x109;  
  20.     public int intCounter = 0;  
  21.   
  22.     @Override  
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         //设置窗口模式,因为需要显示进度条在标题栏  
  26.         requestWindowFeature(Window.FEATURE_PROGRESS);  
  27.         setProgressBarVisibility(true);  
  28.         setContentView(R.layout.main);  
  29.   
  30.         //得到ProgressBar  
  31.         xh_ProgressBar = (ProgressBar) findViewById(R.id.ProgressBar01);  
  32.         xh_ProgressBar2 = (ProgressBar) findViewById(R.id.ProgressBar02);  
  33.         xh_Button = (Button) findViewById(R.id.Button01);  
  34.   
  35.         //设置进度条 不为 不确定模式  
  36.         xh_ProgressBar.setIndeterminate(false);  
  37.         xh_ProgressBar2.setIndeterminate(false);  
  38.   
  39.         //当按钮按下时开始执行  
  40.         xh_Button.setOnClickListener(new Button.OnClickListener() {  
  41.             @Override  
  42.             public void onClick(View v) {  
  43.                 //设置ProgressBar为可见状态  
  44.                 xh_ProgressBar.setVisibility(View.VISIBLE);  
  45.                 xh_ProgressBar2.setVisibility(View.VISIBLE);  
  46.                 //设置ProgressBar的最大值  
  47.                 xh_ProgressBar.setMax(100);  
  48.                 //设置ProgressBar当前值  
  49.                 xh_ProgressBar.setProgress(0);  
  50.                 xh_ProgressBar2.setProgress(0);  
  51.   
  52.                 //通过线程来改变ProgressBar的值  
  53.                 new Thread(new Runnable() {  
  54.                     @Override  
  55.                     public void run() {  
  56.                         for (int i = 0; i < 10; i++) {  
  57.                             try {  
  58.                                 //设置进度值  
  59.                                 intCounter = (i + 1) * 20;  
  60.                                 //睡眠1000毫秒  
  61.                                 Thread.sleep(1000);  
  62.   
  63.                                 if (i == 4) {  
  64.                                     Message m = new Message();  
  65.   
  66.                                     m.what = Activity01.GUI_STOP_NOTIFIER;  
  67.                                     Activity01.this.myMessageHandler  
  68.                                             .sendMessage(m);  
  69.                                     break;  
  70.                                 } else {  
  71.                                     Message m = new Message();  
  72.                                     m.what = Activity01.GUI_THREADING_NOTIFIER;  
  73.                                     Activity01.this.myMessageHandler  
  74.                                             .sendMessage(m);  
  75.                                 }  
  76.   
  77.                             } catch (Exception e) {  
  78.                                 e.printStackTrace();  
  79.                             }  
  80.                         }  
  81.                     }  
  82.   
  83.                 }).start();  
  84.             }  
  85.   
  86.         });  
  87.     }  
  88.   
  89.     Handler myMessageHandler = new Handler() {  
  90.         @Override  
  91.         public void handleMessage(Message msg) {  
  92.             switch (msg.what) {  
  93.             //ProgressBar已经是最大值  
  94.             case Activity01.GUI_STOP_NOTIFIER:  
  95.                 xh_ProgressBar.setVisibility(View.GONE);  
  96.                 xh_ProgressBar2.setVisibility(View.GONE);  
  97.                 Thread.currentThread().interrupted();  
  98.                 break;  
  99.             case Activity01.GUI_THREADING_NOTIFIER:  
  100.                 if (!Thread.currentThread().isInterrupted()) {  
  101.                     //改变ProgressBar的当前值  
  102.                     xh_ProgressBar.setProgress(intCounter);  
  103.                     xh_ProgressBar2.setProgress(intCounter);  
  104.   
  105.                     //设置标题栏中前景的一个进度条进度值  
  106.                     setProgress(intCounter * 100);  
  107.                 }  
  108.                 break;  
  109.             }  
  110.             super.handleMessage(msg);  
  111.         }  
  112.     };  
  113. }  

android 2.0  APILEVEL 5 
源码图片 见附件 
  • xh_04_21_Test.rar (44.1 KB)
  • 下载次数: 253
  • 查看图片附件