Android 控件---ProgressBar进度条

下面详细介绍ProgressBar

一、说明

  在某些操作的进度中的可视指示器,为用户呈现操作的进度,视频一般都有进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。

二、常用属性

    style="?android:attr/progressBarStyle"     默认为圆形

    style="?android:attr/progressBarStyleHorizontal"    水平样式

              android:max="100"    设置最大值

              android:progress="33"   设置当前进度

三、重要方法

    getMax():返回这个进度条的范围的上限

    getProgress():返回进度

    getSecondaryProgress():返回次要进度

    incrementProgressBy(int diff):指定增加的进度

    isIndeterminate():指示进度条是否在不确定模式下

    setIndeterminate(boolean indeterminate):设置不确定模式下

    setVisibility(int v):设置该进度条是否可视

         注意:1、给线程设置休眠会出现错误     
                   Thread.sleep(100);//抛异常           SystemClock.sleep(100);//不会抛异常

                   2、不能在主线程中执行耗时的操作,只能在子线程中操作 ,             

                        另外,在子线程中不能操作主线程中的控件 (ProgressBar除外)

 

四、重要事件

    onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件

五、实例

1.布局文件 (activity_main.xml代码)

<?xml version="1.0" encoding="utf-8"?>                         

2、代码文件(MainActivity.java代码)

package com.example.a0911_homework_05;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {   //初始化控件    private ProgressBar pb_main_pb1;    private int progress;    private TextView tv_main_tv1;    private myHandler myHandler = new myHandler();    private int code = 1;//代表哪一部视频    private class myHandler extends Handler{//通过Handler给主线程发送信息        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if(code == msg.what){                progress++;//每执行一遍就加1                pb_main_pb1.setProgress(progress);                tv_main_tv1.setText(progress + "%");//给百分比设置值            }        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pb_main_pb1 = this.findViewById(R.id.pb_main_pb1);//获取进度条控件        tv_main_tv1 = this.findViewById(R.id.tv_main_tv1);    }    public void setProgress(View view) {//点击就开始下载        if(0 == progress){//如果进度为0            new MyThread().start();//开始线程        }    }    private class MyThread extends Thread{//子线程        @Override        public void run() {//重写线程            super.run();            while(true){                try {                    Thread.sleep(100);//给线程设置睡眠时间0.1s                } catch (InterruptedException e) {                    e.printStackTrace();                }                if(progress == 100){//如果进度为100就终止                    progress = 0;//恢复默认值0                    break;//结束终止                }                //触发handleMessage方法                Message msg = new Message();                msg.what = 1;//给线程做标识                myHandler.sendMessage(msg);            }        }    }}

3:线程小结
SubThread->MainThread 错误
SubThread->Handler->MainThread 正确

 

上面的为进度条,下面灰色条为按钮,点击按钮进度条就会运行

更多相关文章

  1. Android:自定义控件你应该知道的这些事_TypedArray
  2. Android(4)---Android 控件布局常用属性
  3. Android中线程同步之Mutex与Condtion的用法
  4. Android 时间滚动控件
  5. android 计时器线程

随机推荐

  1. Ubuntu手动安装mysql5.7.10
  2. MySQL配置文件无法修改的解决方法(Win10)
  3. Windows下MySQL服务无法停止和删除的解决
  4. Windows10下mysql 5.7.17 安装配置方法图
  5. Oracle10个分区和Mysql分区区别详解
  6. MAC下MySQL初始密码忘记怎么办
  7. Linux安装MySQL教程(二进制分发版)
  8. mysql数据迁移到Oracle的正确方法
  9. 深入浅出的学习Mysql
  10. MAC下MySQL忘记初始密码怎么办