Android studio 进度条

在我们使用进度条 ProgressBar的时候
它的常用属性为:
进度条默认为圆形 ,但是我们这里使用是线型
style="?android:attr/progressBarStyleHorizontal"
android:progress=“33”
android:max=“100”

线程休眠
Thread.sleep(100);//抛异常
SystemClock.sleep(100);//不会抛异常

public class MainActivity extends AppCompatActivity {

    private ProgressBar pb_main_pb1;
    private int progress;
    private TextView tv_main_tv1;
    private MyHandler myHandler = new MyHandler();



    private int code = 1;
    private class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            if(code == msg.what){
                progress ++;
                pb_main_pb1.setProgress(progress);
                tv_main_tv1.setText(progress+"%");
            }

        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pb_main_pb1 = this.findViewById(R.id.pb_main_pb1);
        tv_main_tv1 = this.findViewById(R.id.tv_main_tv1);
    }

    public void studyToast(View view) {
        Toast.makeText(this, "hello Toast", Toast.LENGTH_LONG).show();


    }


    public void setProgressBar(View view) {
          if(0 == progress){
              new MyThread().start();
          }

    }

    private class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while (true){
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if(progress == 100){
                    progress =0;
                    break;
                }

                Message msg = new Message();
                msg.what = 1;
                myHandler.sendMessage(msg);


            }


        }
    }


}

线程注意事项:
我们在操作 (ProgressBar除外) 控件时如果把控件放在子线程里就会出问题,所以我们这里通过MyHandler来处理这个问题。
我们在平常中下载资源时肯定不止是一个的,所以我们通过msg.what = (1,2,3,4…);来代表每一个进程,然后用MyHandler 来获取它的值,然后经过if判断来调用这个线程就行了,这里为了简单的诉说整个过程我采用的是if,你们可以用swith这样会更好一点。

 SubThread->MainThread    错误
  SubThread->Handler->MainThread     正确

猜你喜欢

转载自blog.csdn.net/csdnlcw/article/details/82749778