Android Progressbar进度条显示
16lz
2021-01-23
界面代码:
<?xml version="1.0" encoding="utf-8"?>
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系统会产生一个错误提示,并强制关闭进程, * 针对上述情况,就需要把耗时的操作放在一子线程中。 * * * * */
更多相关文章
- 理解Android UI线程
- Android查看手机线程指令
- Android 多线程下载
- Android ProgressBar 进度条
- Android:控件ProgressBar进度条
- FregServer进程,启动Binder线程池,睡眠等待在proc->wait
- android]Android 线程优先级修改
- 【Android】线程/进程绑定指定CPU核
- Android JNI 开启子线程后调用 Activity 方法更新UI