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

 

界面代码:

<?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系统会产生一个错误提示,并强制关闭进程,    * 针对上述情况,就需要把耗时的操作放在一子线程中。    *    *    *    * */

更多相关文章

  1. 理解Android UI线程
  2. Android查看手机线程指令
  3. Android 多线程下载
  4. Android ProgressBar 进度条
  5. Android:控件ProgressBar进度条
  6. FregServer进程,启动Binder线程池,睡眠等待在proc->wait
  7. android]Android 线程优先级修改
  8. 【Android】线程/进程绑定指定CPU核
  9. Android JNI 开启子线程后调用 Activity 方法更新UI

随机推荐

  1. Android中如何实现高亮显示即选中状态
  2. Android 3.1 r1 API中文文档(6)――ImageVi
  3. 笔试碎片
  4. Android 开发之日志打印封装log
  5. Android Framework架构浅析之【近期任务
  6. Android UI 介绍1
  7. android device ID获取
  8. 在Android Studio中使用Kotlin。
  9. android 在一个应用中启动另一个应用
  10. Android修改ramdisk.img笔记