前两天学习了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();
}
}