Android UI ProgressBar与Timer计时器

ProgessBar也就是常见的进度条,为了演示方便,将它和Timer计时器一起学习。

public class MainActivity extends AppCompatActivity {

    private int progress = 0;
    private ProgressBar pb;
    private Timer timer;
    private TimerTask timerTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pb = (ProgressBar) findViewById(R.id.progressBar);
        //设置进度条的最大数值
        pb.setMax(10);
        //一开始进度条的进度是0
        pb.setProgress(0);
    }

    //activity启动后开始计时
    @Override
    protected void onResume() {
        super.onResume();
        StartTimer();
    }

    //进入后台后计时器暂停
    @Override
    protected void onPause() {
        super.onPause();
        EndTimer();
    }

    public void StartTimer() {
        //如果timer和timerTask已经被置null了
        if (timer == null&&timerTask==null) {
            //新建timer和timerTask
            timer = new Timer();
            timerTask = new TimerTask() {
                @Override
                public void run() {
                    //每次progress加一
                    progress++;
                    //如果进度条满了的话就再置0,实现循环
                    if (progress == 11) {
                        progress = 0;
                    }
                    //设置进度条进度
                    pb.setProgress(progress);
                }
            };
            /*开始执行timer,第一个参数是要执行的任务,
            第二个参数是开始的延迟时间(单位毫秒)或者是Date类型的日期,代表开始执行时的系统时间
            第三个参数是计时器两次计时之间的间隔(单位毫秒)*/
            timer.schedule(timerTask, 1000, 1000);
        }
    }


    public void EndTimer()
    {
        /*这里很奇怪的是如果仅仅是把值赋成Null的话计时并没有停止,循环一次过后Progress就每次都加二了,循环两次过后就是加三
        * 如果仅仅是cancel掉的话也不能再进行调用了
        * 所以想要彻底重置timer的话需要cancel后再置null*/
        timer.cancel();
        timerTak.cancel();
        timer=null;
        timerTask=null;
    }


}

以上程序实现了将一个进度条分割成十格,程序启动后,每一秒进度条都向前走一格,程序进入后台(onPause)后进度条暂停,程序再次启动(onReseum)时继续。进度是由整型progress控制的。

你可能感兴趣的:(JAVA与Andriod)