美文网首页
Android ProcessBar 实现进度条显示线程执行的效

Android ProcessBar 实现进度条显示线程执行的效

作者: CrazyBoomer | 来源:发表于2017-03-26 22:15 被阅读0次

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();
    }

相关文章

网友评论

      本文标题:Android ProcessBar 实现进度条显示线程执行的效

      本文链接:https://www.haomeiwen.com/subject/ktusgttx.html