android控件04---ProgressBar

ProgressBar作用是在界面上顯示一個進度條。

用法也很簡單,代碼如下:


<ProgressBar
        android:id="@+id/progressbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"    //設置進度條的樣式爲水平進度條(默認爲圓形進度條)
        android:max="100"    //設置一個最大值
        />

提到進度條就要提到android控件裏面的可見屬性:visibility,這個屬性下面有3個可選值:
1.VISIBLE        表示控件是可見的(默認)
2.INVISIBLE    表示控件是不可見的(仍然佔據着原來的空間)
3.GONE           表示控件是不可見的(不再佔據任何屏幕空間)

下面就通過一個例子來詳細說明一下:


public class MainActivity extends AppCompatActivity {
    private  Button  buttonOne;
    private  ProgressBar  progressBar;
    private  Handler  handler;
    private  TimerTask  task;    //這是一個抽象類
    private  Timer  timer;    //定義一個定時器 Timer是一個普通的類,裏面有幾個方法
    private  int  progress = 0;    //初始化進度條的值
    private  boolean  isfull = false;     //用來判斷進度條是否已經讀取完
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonOne = (Button)findViewById(R.id.buttonOne);
        progressBar = (ProgressBar)findViewById(R.id.progressbar);
       
        timer = new Timer();
        buttonOne.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                timer.schedule(task,0,100);  //每0.1秒執行一次
                /*
                上面的函數的原形是這樣子的:timer.schedule(new TimerTask(){ void run()},0, 100);
                第一個參數是 TimerTask類的對象 ,我們實現TimerTask的run()方法就是要週期執行的任務;
                第二個參數兩種類型,第一種是long類型,表示多長時間後開始執行,另一種是Date類型,表示從那個時間後開始執行;“0”則表示無延遲
                第三個參數就是執行的週期,爲long類型。
                */
            }
        });
        //用handler對象裏面的handleMessage方法來進行消息處理.
        handler = new Handler() {
            public void handleMessage(Message msg) {
                switch (msg.what){
                    case 0x001:
                        progressBar.setVisibility(View.VISIBLE);     //設置進度條爲可見
                        buttonOne.setVisibility(View.INVISIBLE);     //設置按鈕爲隱藏
                        progressBar.setProgress(progress);             //改變進度條的值
                        break;
                    case 0x002:
                        progressBar.setVisibility(View.GONE);     //刪除進度條
                        buttonOne.setVisibility(View.VISIBLE);     //設置按鈕爲可見
                        task.cancel();    //結束線程
                        timer.cancel();
                        Toast.makeText(MainActivity.this,"加載完成",Toast.LENGTH_LONG).show();    
                        break;
                }
            }
        };
        task = new TimerTask() {
            public void run() {
                if (!isfull){
                    if (progress < 100){
                        progress++;
                        //發送消息
                        handler.sendEmptyMessage(0x001);
                    }else{
                        handler.sendEmptyMessage(0x002);
                    }
                }
            }
        };
    }
}

運行效果如下:

1.進入界面進度條,按鈕均爲可見狀態。


2.點擊按鈕,按鈕隱藏,進度條每0.1秒漲1%(最大值爲100,每次執行時+1)


3.進度條讀取完成時,進度條消息(位置也不存在了),按鈕再次爲可見



有什麼不好的地方,希望大家能說出來,你的指出,就是我的進步。
最後附上一個網址,對android消息處理機制不熟的人可以去看看:http://www.cnblogs.com/codingmyworld/archive/2011/09/14/2174255.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章