android控件04---ProgressBar

ProgressBar作用是在界面上显示一个进度条。

用法也很简单,代码如下:


<ProgressBar
        android:id="@+id/progressbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"    //设置进度条的样式为水平进度条(默认为圆形进度条)
        android:max="100"    //设置一个最大值
        />

提到进度条就要提到android控件里面的可见属性:visibility,这个属性下面有3个可选值:
1.VISIBLE        表示控件是可见的(默认)
2.INVISIBLE    表示控件是不可见的(仍然占据着原来的空间)
3.GONE           表示控件是不可见的(不再占据任何屏幕空间)

下面就通过一个例子来详细说明一下:


public class MainActivity extends AppCompatActivity {
    private  Button  buttonOne;
    private  ProgressBar  progressBar;
    private  Handler  handler;
    private  TimerTask  task;    //这是一个抽象类
    private  Timer  timer;    //定义一个定时器 Timer是一个普通的类,里面有几个方法
    private  int  progress = 0;    //初始化进度条的值
    private  boolean  isfull = false;     //用来判断进度条是否已经读取完
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonOne = (Button)findViewById(R.id.buttonOne);
        progressBar = (ProgressBar)findViewById(R.id.progressbar);
       
        timer = new Timer();
        buttonOne.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                timer.schedule(task,0,100);  //每0.1秒执行一次
                /*
                上面的函数的原形是这样子的:timer.schedule(new TimerTask(){ void run()},0, 100);
                第一个参数是 TimerTask类的对象 ,我们实现TimerTask的run()方法就是要周期执行的任务;
                第二个参数两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;“0”则表示无延迟
                第三个参数就是执行的周期,为long类型。
                */
            }
        });
        //用handler对象里面的handleMessage方法来进行消息处理.
        handler = new Handler() {
            public void handleMessage(Message msg) {
                switch (msg.what){
                    case 0x001:
                        progressBar.setVisibility(View.VISIBLE);     //设置进度条为可见
                        buttonOne.setVisibility(View.INVISIBLE);     //设置按钮为隐藏
                        progressBar.setProgress(progress);             //改变进度条的值
                        break;
                    case 0x002:
                        progressBar.setVisibility(View.GONE);     //删除进度条
                        buttonOne.setVisibility(View.VISIBLE);     //设置按钮为可见
                        task.cancel();    //结束线程
                        timer.cancel();
                        Toast.makeText(MainActivity.this,"加载完成",Toast.LENGTH_LONG).show();    
                        break;
                }
            }
        };
        task = new TimerTask() {
            public void run() {
                if (!isfull){
                    if (progress < 100){
                        progress++;
                        //发送消息
                        handler.sendEmptyMessage(0x001);
                    }else{
                        handler.sendEmptyMessage(0x002);
                    }
                }
            }
        };
    }
}

运行效果如下:

1.进入界面进度条,按钮均为可见状态。


2.点击按钮,按钮隐藏,进度条每0.1秒涨1%(最大值为100,每次执行时+1)


3.进度条读取完成时,进度条消息(位置也不存在了),按钮再次为可见



有什么不好的地方,希望大家能说出来,你的指出,就是我的进步。
最后附上一个网址,对android消息处理机制不熟的人可以去看看:http://www.cnblogs.com/codingmyworld/archive/2011/09/14/2174255.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章