Android Progressbar进度条显示

Android Progressbar进度条显示_第1张图片

 

界面代码:




   
       
       
       

   
    
        
        

    
    

JAVA代码

package com.example.dell.progressbar;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
ProgressBar progressBar1;
TextView tvMsg;
EditText etMSg;
Button btnDown;
String s;
 int size;
 int progressValue=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar1=(ProgressBar)findViewById(R.id.progressBar1);
        tvMsg=(TextView)findViewById(R.id.tvMsg);
        etMSg=(EditText)findViewById(R.id.etMSg);
        btnDown=(Button)findViewById(R.id.btnDown);
        btnDown.setOnClickListener(new Action());
    }
    class Action implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            s = etMSg.getText().toString();//获取文本框的字符串
            size = Integer.parseInt(s);//将字符串化成整数
            progressBar1.setMax(size);//设置进度条的最大值
            Thread thread = new Thread(myrun);

            thread.start();//开始异步执行
        }
    }
    Runnable myrun =new Runnable() {
        @Override
        public void run() {
            while (true) {
                Message msg = handler.obtainMessage();//获取主线程上的Message
                handler.sendMessage(msg);
                msg.arg1=progressValue++;//将进度值作为消息的参数进行封装,使其进度自加一
                msg.arg1 = progressValue;
                if (progressValue > size)//当value值大于size值是退出循环
                    break;
                try {
                    Thread.sleep(1000);//设置一个线程休眠时间 值越大 越容易看到其滚动效果
                } catch (InterruptedException e) {
                    e.printStackTrace();//线程休眠会出现异常,所以要设置捕捉异常
                }
            }
        }
    };
        Handler handler=new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(Message msg) {// public boolean handleMessage(Message msg) {是CAllback的方法
                                                            //callbacks是Hander类的一个内部接口--------boolran是接口的参数
                progressBar1.setProgress(msg.arg1);   //接受另一线程的Message,参数arg1代表了进度
                tvMsg.setText((int)(msg.arg1*1.0/size*100)+"%");  //设置显示的进度,只显示整数
                progressBar1.setSecondaryProgress(msg.arg1+10);  //设置第二进度值
                return false;
            }
        });
    }
    /*
    * 代码中运用了线程来控制UI组件,通过Handler 对象来传递消息。Handler 主要接受子线程发送的数据,并用此数据配合主线程更新UI.如果此时需要一个
    * 耗时间的操作,eg;联网下载数据,会这读取大文件。不能将这些主线程中,界面会出现假死现象,如果5秒还没完成进程。Android系统会产生一个错误提示,并强制关闭进程,
    * 针对上述情况,就需要把耗时的操作放在一子线程中。
    *
    *
    *
    * */

你可能感兴趣的