Android高级UI组件progressbar进度条

前两天学习了datepicker日历,time picker时间以及chronrmeter计时器的基础控件,今天浅浅了解一下Android其中的一个高级UI组件progressbar吧,进度条基本是每一个App的必备了,它不仅能实时展示你的网速加载进度,同时还能增加用户的赏识性,极大程度的提升了软件的的友好性能,那么今天我们就来简单了解一下吧!

我就针对我要展示的代码来讲,我下面贴的代码是实现一个进度条,我会随机生成一个0-10的自然数,当前实时的进度就是累加起来的和,休眠时间为200毫秒,如200毫秒生成数值8则进度条为8%,如下一个200毫秒有生成一个数值9则此时的进度条达到(8%+9%)即17%当总数和达到100时也即完成进度条,toast出加载完成,进入下一个界面!

在代码段中已经进行了大量注释,如果有不明白的可以评论区留言或者私信我,如果有什么内容上的不足和错误还请各位同仁指正!

很明显完成这么一个功能用到了handler线程方面的知识,我就简单说一下吧,后期会出一期关于handler线程出处理机制的内容

(注意我下面介绍的量是我自己定义的,不要理解为一定要用currentprogress等)

简单介绍:

简单handler可以理解为主线程,thread可以简单理解为子线程,Android不能再主线程完成耗时操作所以要在子线程里完成耗时操作,然后调用主线程的handler对象用sendmessage方法将信息发送给主线程,主线程根据获得到的消息更新UI组件信息!其中的在子线程用到的currentprogress.what=0然后在主线程msg.what==0其实有一点点类似startactivityforresult的形式!

代码如下:

public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private Handler handler;
private int currentprogerss=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar=findViewById(R.id.progressbar);
 handler=new Handler(){
     @Override
     public void handleMessage(@NonNull Message msg) {
       if(msg.what==0){
         progressBar.setProgress(currentprogerss);
       }else {
           Toast.makeText(MainActivity.this,"加载完成",Toast.LENGTH_SHORT).show();
           progressBar.setVisibility(View.GONE);
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
       }
     }
 };
 new Thread(new Runnable() {
     @Override
     public void run() {
        while (true){
            currentprogerss=work();
            Message message=new Message();
            if(currentprogerss<100){
                message.what=0;
                handler.sendMessage(message);
            }else {
                message.what=1;
                handler.sendMessage(message);
                break;
            }
        }
     }
    //模拟耗时操作
     private int work() {
         currentprogerss+=Math.random()*10;
         try {
             Thread.sleep(200);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
         return currentprogerss;
     }

 }).start();
    }

}
 

猜你喜欢

转载自blog.csdn.net/Abtxr/article/details/125836819