安卓高級組件-----進度條


        進度條組件是安卓重要組件之一。當后台某個程序執行時,前台進度條動態顯示了程序執行進度的百分比。是耗時較長的程序讓用戶覺得在自己的掌控之中,提高程序的友好型。

        安卓支支持幾種風格的進度條,能通過style屬性呢設置進度條風格,該屬性如下:

        @android:style/Widget.ProgressBar.Horizontal    水平進度條

        @android:style/Widget.ProgressBar.Inverse        普通環形進度條

        @android:style/Widget.ProgressBar.Large           大環形進度條

        @android:style/Widget.ProgressBar.Large.Inverse   大環形進度條

        @android:style/Widget.ProgressBar.Small            小環形進度條

        @android:style/Widget.ProgressBar.Small.Inverse   小環形進度條

        同時,進度條在xml文件中還要如下屬性:

        android:max          設置進度條最大值

        android:rpogress    指定進度條已經完成的進度值

        android:ProgressDrawable     指定進度條軌道的繪制形式

進度條組件有兩個最常用的方法:setProgress()設置進度條已經完成的進度;incrementProgressBy()設置進度條進度增加或減少;參數是正數時增加,負數減少;

實例操作:下面我們實現視屏進度條和環形進度條

1.新建工程,在布局中添加兩個進度條,一個為環形一個水平進度條

            <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_gravity="center_horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:max="100"
            android:layout_weight="1" />

        <ProgressBar
            android:id="@+id/progressBar2"
            style="?android:attr/progressBarStyleSmall"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

2.主活動中獲取進度條,定義一個進度變量和消息處理Handler類對象

        hp = (ProgressBar)findViewById(R.id.progressBar1);
        cp = (ProgressBar)findViewById(R.id.progressBar2);
        h = new Handler(){

            @Override
            public void handleMessage(Message msg) {
                if(msg.what == 0x11){
                    hp.setProgress(progress);
                }else {
                    Toast.makeText(MainActivity.this, "耗時完成", Toast.LENGTH_SHORT).show();        }
                    hp.setVisibility(View.GONE);
                    cp.setVisibility(View.GONE);                    
            }            
        };

3.通過匿名內部類實例化消息處理Handler類對象,重寫handlerMessage()方法。耗時沒有完成時更新進度,耗時完成之后出現提示

    h = new Handler(){

        public void handleMessage(Message msg) {
            if(msg.what == 0x11){
                hp.setProgress(progress);
            }else {
                Toast.makeText(MainActivity.this, "耗時完成", Toast.LENGTH_SHORT).show();        }
                hp.setVisibility(View.GONE);
                cp.setVisibility(View.GONE);                    
        }            
    }

4.開啟線程耗時,sendMessage()發送處理消息

        new Thread(new Runnable() {
            
            @Override
            public void run() {
                while(true){
                    progress = doWork();
                    Message m = new Message();
                    if(progress <= 100){
                        m.what = 0x11;
                        h.sendMessage(m);
                    }else {
                        m.what = 0x10;
                        h.sendMessage(m);
                        break;
                    }
                }
                
            }
            
            private int doWork(){
                progress += Math.random()*10;
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return progress;
            }
        }).start();

運行代碼,可以看到環形進度條和水平進度條更新。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM