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();
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. ANR异常 Application No Response:应用程序无响应。在主线程中,是不允许执行耗时的操...
    JackChen1024阅读 5,345评论 0 3
  • 2017年5月17日 Kylin_Wu 标注(★☆)为考纲明确给出考点(必考) 常见手机系统(★☆) And...
    Azur_wxj阅读 5,822评论 0 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,016评论 25 709
  • 2017年05月19日(农历四月廿四)星期五 晴 【早起】4:45 【学习】 1.通读《大学》1遍 ,累计61 2...
    中和lxy阅读 3,211评论 0 1
  • 应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务...
    OzanShareing阅读 2,806评论 0 1

友情链接更多精彩内容