Android 高級控件學習--ProgressBar

Android 高級控件學習--ProgressBar

佈局文件main.xml

<?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"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleLarge"
        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>

源文件Activity01.java

package com.lxt008;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;

public class Activity01 extends Activity
{
	//聲明ProgressBar對象
	private ProgressBar m_ProgressBar;
	private ProgressBar m_ProgressBar2;
	private Button mButton01;
	protected static final int GUI_STOP_NOTIFIER = 0x108;
	protected static final int GUI_THREADING_NOTIFIER = 0x109;
	public int intCounter=0;
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		//設置窗口模式,,因爲需要顯示進度條在標題欄
		requestWindowFeature(Window.FEATURE_PROGRESS);
		setProgressBarVisibility(true);
		setContentView(R.layout.main);
		
		//取得ProgressBar
		m_ProgressBar = (ProgressBar) findViewById(R.id.ProgressBar01);
		m_ProgressBar2= (ProgressBar) findViewById(R.id.ProgressBar02);
		mButton01 = (Button)findViewById(R.id.Button01); 
		
		m_ProgressBar.setIndeterminate(false);
		m_ProgressBar2.setIndeterminate(false);
		
		//當按鈕按下時開始執行,
	    mButton01.setOnClickListener(new Button.OnClickListener()
	    {
	      @Override
	      public void onClick(View v)
	      {
	        // TODO Auto-generated method stub
	    	  
	    	  //設置ProgressBar爲可見狀態
	    	  m_ProgressBar.setVisibility(View.VISIBLE);
	    	  m_ProgressBar2.setVisibility(View.VISIBLE);
	    	  //設置ProgressBar的最大值
	    	  m_ProgressBar.setMax(100);
	    	  //設置ProgressBar當前值
	    	  m_ProgressBar.setProgress(0);
	    	  m_ProgressBar2.setProgress(0);

	    	  //通過線程來改變ProgressBar的值
				new Thread(new Runnable() {
					public void run()
					{
						for (int i = 0; i < 10; i++)
						{
							try
							{
								intCounter = (i + 1) * 20;
								Thread.sleep(1000);

								if (i == 4)
								{
									Message m = new Message();

									m.what = Activity01.GUI_STOP_NOTIFIER;
									Activity01.this.myMessageHandler.sendMessage(m);
									break;
								}
								else
								{
									Message m = new Message();
									m.what = Activity01.GUI_THREADING_NOTIFIER;
									Activity01.this.myMessageHandler.sendMessage(m);
								}
							}
							catch (Exception e)
							{
								e.printStackTrace();
							}
						}
					}
				}).start();
			}
		});
	}

	  Handler myMessageHandler = new Handler()
	  {
	    // @Override 
		  public void handleMessage(Message msg)
		  {
			  switch (msg.what)
			  {
			  //ProgressBar已經是對大值
			  case Activity01.GUI_STOP_NOTIFIER:
				  m_ProgressBar.setVisibility(View.GONE);
				  m_ProgressBar2.setVisibility(View.GONE);
				  Thread.currentThread().interrupt();
				  break;
			  case Activity01.GUI_THREADING_NOTIFIER:
				  if (!Thread.currentThread().isInterrupted())
				  {
					  // 改變ProgressBar的當前值
					  m_ProgressBar.setProgress(intCounter);
					  m_ProgressBar2.setProgress(intCounter);
					  
					  // 設置標題欄中前景的一個進度條進度值
					  setProgress(intCounter*100);
					  // 設置標題欄中後面的一個進度條進度值
					  setSecondaryProgress(intCounter*100);//
				  }
				  break;
			  }
			  super.handleMessage(msg);
		 }
	  };
}

一、xml中style屬性爲ProgressBar的樣式風格

Android的ProgressBar樣式:

style="?android:attr/progressBarStyleHorizontal" 長形進度條

style="?android:attr/progressBarStyleLarge" 超大號圓形

style="?android:attr/progressBarStyleSmall" 小號圓形

style="?android:attr/progressBarStyleSmallTitle" 標題型圓形


二、源文件中requestWindowFeature可以設置的值有:
1.DEFAULT_FEATURES:系統默認狀態,一般不需要指定
2.FEATURE_CONTEXT_MENU:啓用ContextMenu,默認該項已啓用,一般無需指定
3.FEATURE_CUSTOM_TITLE:自定義標題。當需要自定義標題時必須指定。如:標題是一個按鈕時
4.FEATURE_INDETERMINATE_PROGRESS:不確定的進度
5.FEATURE_LEFT_ICON:標題欄左側的圖標
6.FEATURE_NO_TITLE:無標題
7.FEATURE_OPTIONS_PANEL:啓用“選項面板”功能,默認已啓用。
8.FEATURE_PROGRESS:進度指示器功能
9.FEATURE_RIGHT_ICON:標題欄右側的圖標

三、源文件中m_ProgressBar.setVisibility(View.VISIBLE);

setVisibility有三個參數:
VISIBLE:0  意思是可見的
INVISIBILITY:4 意思是不可見的,但還佔着原來的空間
GONE:8  意思是不可見的,不佔用原來的佈局空間

四、源文件中設置ProgressBar相關字段

m_ProgressBar.setMax(100);//設置ProgressBar最大值
m_ProgressBar.setProgress(0);//設置ProgressBar當前值

五、線程

new Thread(new Runnable() {
                    public void run()
                    {

                    //try to do

                    }

}).start();

六、Handle與Message暫緩,暫時看做windowsapi裏的Sendmessage

發佈了30 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章