Android ProcessBar 實現進度條顯示線程執行的效果

1.XML文件添加兩個ProcessBar組件,分別選擇水平/圓形進度條

<ProgressBar android:id="@+id/pb1"
    android:layout_width="match_parent"
    android:max="100"
    style="@android:style/Widget.ProgressBar.Horizontal"
    android:layout_height="wrap_content"/>

<ProgressBar android:id="@+id/pb2"
    android:layout_width="wrap_content"
    style="@android:attr/progressBarStyleLarge"
    android:layout_height="wrap_content"/>

2.Activity文件定義兩個進度條,一個用于表示進度的int變量,一個處理消息的Handler類對象

    private ProgressBar hp;
    private ProgressBar cp;
    private int mProgressStatus =0;
    private Handler mHandler;//用于處理消息的Handler對象

3.Oncreate()方法獲取進度條,通過匿名內部類實例化Handler類對象,重寫其handleMessage方法,實現耗時操作未完成的更新進度,以及完成時設置進度條不再顯示

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hp =(ProgressBar) findViewById(R.id.pb1);
        cp= (ProgressBar)findViewById(R.id.pb2);
        mHandler= new Handler(){
            @Override
            public void handleMessage(Message msg){
                if (msg.what==0x111){
                    hp.setProgress(mProgressStatus);
                }
                else {
                    Toast.makeText(MainActivity.this, 
                    "finish", Toast.LENGTH_SHORT).show();
                    hp.setVisibility(View.GONE);
                    cp.setVisibility(View.GONE);
                }
            }
        };

4.開啟一個耗時線程,調用sendMessage方法發送處理消息

        new Thread(new Runnable() {         
            @Override
            public void run() {
                // TODO Auto-generated method stub
                while(true){
                    mProgressStatus= doWork();
                    Message m=new Message();
                    if(mProgressStatus<100){
                        m.what=0x111;
                        mHandler.sendMessage(m);
                    }
                    else {
                        m.what=0x110;
                        mHandler.sendMessage(m);
                        break;
                    }                   
                }
            }
            private int doWork()
            {
                mProgressStatus+= Math.random()*10;
                try{
                    Thread.sleep(200);
                } catch(InterruptedException e){
                    e.printStackTrace();
                }
                return mProgressStatus;
            }           
        }).start();
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. ANR異常 Application No Response:應用程序無響應。在主線程中,是不允許執行耗時的操...
    JackChen1024閱讀 1,454評論 0 3
  • 2017年5月17日 Kylin_Wu 標注(★☆)為考綱明確給出考點(必考) 常見手機系統(★☆) And...
    Azur_wxj閱讀 1,838評論 0 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,359評論 25 708
  • 2017年05月19日(農歷四月廿四)星期五 晴 【早起】4:45 【學習】 1.通讀《大學》1遍 ,累計61 2...
    中和lxy閱讀 452評論 0 1
  • 應用服務器是指通過各種協議把商業邏輯曝露給客戶端的程序。它提供了訪問商業邏輯的途徑以供客戶端應用程序使用。應用服務...
    OzanShareing閱讀 369評論 0 1