Android_Chronometer计时器

最近做一个项目用到Handler 和Message ,开始时不是很明白,不了解其中的内部机制,所以开发起来有点难度,之后自己找了Android 时间服务 这一节的内容,总结了一点关于时间的知识,在这里大概写一下,也给更多有需要的童鞋参考参考:

1. 这里首先来的是定时器Chronometer ,这是一个组件,在可视化视图中可以直接拖拽过去,然后自己设置相关的属性,我平时直接边界XML布局文件实现,个人感觉这样思路不会混乱。定时器比较简单,没有很多复杂的方法,大家只要记住重要的3个方法:start(); stop(); setBase(); 前两个方法没有参数,是启动和停止计时器的方法,后面的是重置计时器的,可以有参数,参数是从那个时间开始计时。先来看看效果图:

步骤:

 1】 布局采用线性布局,自己砌上去就行了。不多说

 2】onChronometerTick事件方法是计时器每秒回调的方法,我们可以用它来更新UI,看下面的代码:

package com.android.android_chronometer;

import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener,
        OnChronometerTickListener {

    private Button btnStart, btnStop, btnReset;
    private TextView textViewCurrentTime;
    // 定时器,一个可以自己设定开始时间的定时器
    private Chronometer chronometer;
    private SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = (Button) this.findViewById(R.id.buttonBegin);
        btnStop = (Button) this.findViewById(R.id.buttonStop);
        btnReset = (Button) this.findViewById(R.id.buttonReset);
        textViewCurrentTime = (TextView) this
                .findViewById(R.id.textViewCurrentTime);
        chronometer = (Chronometer) this.findViewById(R.id.chronometer1);

        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);
        btnReset.setOnClickListener(this);

        chronometer.setOnChronometerTickListener(this);
        // 设定显示的计时格式
        chronometer.setFormat("计时器:%s");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.buttonBegin:
            // 计时器启动
            chronometer.start();
            break;
        case R.id.buttonStop:
            // 计时器停止
            chronometer.stop();
            break;
        default:
            // 以当前时刻重新计时
            chronometer.setBase(SystemClock.elapsedRealtime());
            break;
        }
    }

    /** 定时器没秒回调的方法,这样可以在UI界面上更新数据 */
    @Override
    public void onChronometerTick(Chronometer chronometer) {
        // TODO Auto-generated method stub
        textViewCurrentTime.setText("当前时间:" + formatter.format(new Date()));
    }

}


3】Handler 和Message 在后面的笔记中记录。

原文地址:https://www.cnblogs.com/Isaber-blogs/p/3211026.html