zoukankan      html  css  js  c++  java
  • Android中的常用控件之进度条(ProgressBar)

    ProgressBar的常用属性:style,进度条的样式,默认为圆形,用style="?android:attr/progressBarStyleHorizontal"可以将进度条设为条状;android:progress,进度条当前所处进度;android:max,进度条总进度。

            用线程实现进度条的注意事项:不能在主线程中执行耗时的操作,只能在子线程中操作;另外,在子线程中不能操作主线程中的控件(ProgressBar除外):

    修改后MainActivity.java里的代码如下:

    public class MainActivity extends AppCompatActivity {
     
        private int p=0;//当前进度
        private ProgressBar pb_main_download;//进度条
        private TextView tv_main_desc;//显示文本的控件
        private MyHandler myHandler=new MyHandler();//新写的Handler类
     
        public class MyHandler extends Handler{
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                int code=msg.what;//接受处理码
                switch (code){
                    case 1:
                        p++;
                        pb_main_download.setProgress(p);//给进度条的当前进度赋值
                        tv_main_desc.setText(p+"%");//显示当前进度为多少
                        break;
                }
            }
        }
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            //根据ID找到进度条
            pb_main_download=findViewById(R.id.pb_main_download);
            //根据ID找到显示文本的控件
            tv_main_desc=findViewById(R.id.tv_main_desc);
        }
     
        //点击Download按钮所调用的方法
        public void download(View view) {
            if(0==p){//如果当前进度为0
                new myThread().start();//开启线程
            }
        }
     
        public class myThread extends Thread{
            @Override
            public void run() {
                super.run();
                while(true){
                    try {
                        Thread.sleep(100);//使线程休眠0.1秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
     
                    if(p==100){//当前进度等于总进度时退出循环
                        p=0;
                        break;
                    }
     
                    Message msg=new Message();
                    msg.what=1;
                    myHandler.sendMessage(msg);//发送处理码
                }
            }
        }
    }



    ---------------------
    作者:前路漫漫,两手空空
    来源:CSDN
    原文:https://blog.csdn.net/weixin_42687829/article/details/82728791
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    C程序中的raise和kill两个函数有何不同?
    修改目录proc下的tcp_tw_recycle报“只读文件系统”
    运行程序时报错“Value too large for defined data type”
    服务网格代理Envoy入门
    Docker入门之创建镜像初步
    联想笔记本上Ubuntu无线网卡问题
    Docker入门之安装Docker
    Python错误“ImportError: No module named MySQLdb”解决方法
    GLIBC中的库函数fflush究竟做了什么?
    Win10删除电脑3D对象等7个文件夹
  • 原文地址:https://www.cnblogs.com/derekhan/p/11094690.html
Copyright © 2011-2022 走看看