Android 计时器 Chronometer or timer+timerTask

本文介绍了一种简单的Android计时器实现方式,使用Chronometer组件快速构建应用中的计时功能,并展示了如何添加小时显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android 两种实现计时器时分秒的实现,把时间放在你的手中~

原文链接:http://blog.youkuaiyun.com/csdn1125550225/article/details/54375174

参考链接:http://www.cnblogs.com/liushilin/p/5802954.html

可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器。这个东西其实实现起来非常简单。

只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了。

1 <Chronometer
2         android:layout_width="wrap_content"
3         android:layout_height="wrap_content"
4         android:format="%s"
5         android:id="@+id/timer"/>

 是的,就这么简单。java代码同样

复制代码
 1  @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         super.onCreate(savedInstanceState);
 4         setContentView(R.layout.activity_main);
 5         timer = (Chronometer) findViewById(R.id.timer);
 6     }
 7 
 8     public void btnClick(View view) {
 9         timer.setBase(SystemClock.elapsedRealtime());//计时器清零
10         timer.start();
11     }
复制代码

超简单有木有?看看运行结果:

或许你会说,这个要是需要显示上时间怎么弄呢?不急不急,两行代码就能解决的事情。

复制代码
 1 public void btnClick(View view) {
 2         timer.setBase(SystemClock.elapsedRealtime());//计时器清零
 3         int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 60);
 4         timer.setFormat("0"+String.valueOf(hour)+":%s");
 5         timer.start();
 6     }
 7 
 8     public void stopClick(View view) {
 9         timer.stop();
10     }
复制代码

恩,对,就是 这么简单,不过别忘了把xml的format改一下

复制代码
1 <Chronometer
2         android:layout_width="match_parent"
3         android:layout_height="wrap_content"
4         android:format="00:00:00"
5         android:gravity="center"
6         android:id="@+id/timer"/>
复制代码

是的,你没有看错,这样就可以了,不信,你看!

 

就和你想象的录像上方的时间一样有木有?恩。你前面设置一个圆圈,再设置计时器颜色就和它一样有逼格了。



自己写了个简单例子  方便看 去掉原文刷新UI 的操作 方便看timer 和timerTask

package com.wang.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.util.Timer;
import java.util.TimerTask;

/**
 * 汪少立
 * timer timerTask  A Simple Example
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    public static final String TAG = "MainActivity";
    private Button bt_stop;
    private Timer timer;
    long i=0;


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

        timer = new Timer();
//    public void schedule(TimerTask task, long delay, long period)
        /**
         *  delay 延迟执行时间
         *  period 间隔执行时间
         */
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
//                your code

//                for example
                i+=1000;
                Log.i(TAG,i+"");

            }
        }, 0, 1000);

    }

    private void initView() {
        bt_stop = (Button) findViewById(R.id.bt_stop);

        bt_stop.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            //点击按钮停止
            case R.id.bt_stop:
                if(null!=timer){
                    timer.cancel();
                }
                break;
        }
    }
}


1 异常日志:

            java.lang.IllegalStateException: Timer was canceled 

2 所做操作:

            调用cancel()取消后不能再执行 schedule语句,否则提示出现以上异常。

3 解决方案

            正确的中止Timer方法:

                    timer.cancel();

                    timer.purge();

                    timer = null;(可选)

 


 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值