Android应用增加计时器

昨天写的Sudoku游戏需要增加计时器功能,使用Chronometer实现如下,由于Chronometer自己在调用stop之后后台的计时器还会继续增加,所以暂停功能需要额外实现:

在StartActivity onCreate方法中添加如下代码:

textView = (TextView) findViewById(R.id.time_text);
timer = (Chronometer) findViewById(R.id.chronometer);
timer.setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
timer.start();

pauseButton = (Button) findViewById(R.id.pause);
pauseButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        pauseOrStart++;
        if (pauseOrStart % 2 == 1) {
            Toast.makeText(StartActivity.this, "Pause", Toast.LENGTH_SHORT).show();
            timeWhenStopped = timer.getBase() - SystemClock.elapsedRealtime();
            timer.stop();
        } else {
            Toast.makeText(StartActivity.this, "Start", Toast.LENGTH_SHORT).show();
            timer.setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
            timer.start();
        }
    }
});

在activity_start.xml中增加如下内容:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="5dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/time_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Time:"
        android:textSize="30sp"
        android:textColor="@color/green"
        android:layout_weight="2"/>

    <Chronometer
        android:id ="@+id/chronometer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:format="%s"
        android:textSize="30sp"
        android:textColor="@color/green"
        android:layout_weight="25"/>

    <Button
        android:id="@+id/pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Pause"
        android:textColor="@color/green"
        android:background="@drawable/shape2"
        android:layout_weight="1"/>

</LinearLayout>

带有pause功能的Chronometer的实现可以参考这里:

http://stackoverflow.com/questions/5594877/android-chronometer-pause

class PausableChronometer extends Chronometer {

    private long timeWhenStopped = 0;

    public PausableChronometer(Context context) {
        super(context);
    }

    public PausableChronometer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PausableChronometer(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void start() {
        setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
        super.start();
    }

    @Override
    public void stop() {
        super.stop();
        timeWhenStopped = getBase() - SystemClock.elapsedRealtime();
    }

    public void reset() {
        stop();
        setBase(SystemClock.elapsedRealtime());
        timeWhenStopped = 0;
    }

    public long getCurrentTime() {
        return timeWhenStopped;
    }

    public void setCurrentTime(long time) {
        timeWhenStopped = time;
        setBase(SystemClock.elapsedRealtime()+timeWhenStopped);
    }
}
时间: 2024-10-21 22:12:09

Android应用增加计时器的相关文章

Android.mk增加本地程序和库的常用模版

Android.mk增加本地程序和库的常用模版 Android中增加本地程序或者库,这些程序和库与其所在路径没有关系,只与它们的配置文件Android.mk有关.Android.mk文件中能够主要包含一些系统公共的宏.在一个Android.mk中可以生成多个可执行程序.动态库或者静态库. A,编译C/C++应用程序的模板 #Demo Exe LOCAL_PATH := $(call my-dir) #include $(CLEAR_VARS) LOCAL_SRC_FILES:= main.c L

delphi xe6 android ListView增加 Header或Footer 的方法

var  Item1: TListViewItem;begin    Item1 := ListView1.Items.Add;    Item1.Purpose:=TListItemPurpose.Header;//    Item1.Purpose:=TListItemPurpose.Footer;    Item1.text:=' xxxx';//Header或Footer显示的内容end; delphi xe6 android ListView增加 Header或Footer 的方法,布

android学习笔记——计时器实现

根据android疯狂讲义来写写代码,在博客里面将这些写过的代码汇总一下.实现的功能很简单:就是一个简单的计时器,点击启动按钮会开始计时,当计时到20秒时会自动停止计时. 界面如下: 界面代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="

全志Android设备增加Usb host ADK 功能

全志Android设备增加Usb host ADK 功能 Usb Host ADK是指不采用USB驱动,直接用java与设备编程的 这样让Android 可以无需修改内核和驱动情况下方便与各种USB外设通讯.全志的CPU的资料都是公开的,因此我们在上面开发很多应用.但是发现无法使用usb host 接口. 一.测试 可以简单下载USB Device info 来测试 https://play.google.com/store/apps/details?id=aws.apps.usbDeviceE

为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通

为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通道选择 广而告之 使用socket.io作为跨浏览器平台的实时推送首选,经测试在各个主流浏览器上测试都确实具有良好的下实时表现.这里为推广socketio-netty服务器端实现哈,做次广告,同时预热一下: socketio-netty : 又一款socket.io服务器端实现,兼容0.9-1.0版本~ 示范目的 我们要构建一个在市面上常见浏览器上都可以正常运行的集体聊天应用,保证在IE6+,Fi

[Android]AndroidBucket增加碎片SubLayout功能及AISubLayout的注解支持

以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3709957.html 之前写过一篇博客,是使用Fragment来实现TabHost的效果,并且模拟TabHost的切换各个fragment生命周期的调用,见http://www.cnblogs.com/tiantianbyconan/p/3360938.html 但是如果要实现的效果是两级的Tab,比如在第一级tab中又有三个子Tab切换不同的布局, 相当于在Frag

Android体系增加鼠标键盘音讯的办法

晓得音讯传送的途径,就很清楚能够在哪些环节把我需求的键盘鼠标音讯增加进去了 1.1:LinuxDriver层面增加: 能够写一个LinuxDriver注册一个字符设备驱动次序,树立一个虚拟的字符设备,主设备号13运用Ioctl和运用次序交流. 之前在Linux2.4年代,Sam曾在S3C2440A 上写过这样一个Driver自己起名叫VInput能够完成以上功用. 长处很少. 缺陷 1.编程较为杂乱.LinuxKernel从2.42.6再到3.0Kernel改动不小,仅字符设备驱动次序的注册办法

Android CountDownTimer倒计时器

示例代码如下: int totalTime = 10000; // 总时间 int tickTime = 100; // 滴答时间 CountDownTimer timer = new CountDownTimer(totalTime, tickTime) { @Override public void onTick(long millisUntilFinished) { // 每tickTime执行一次此方法. // millisUntilFinished为距离结束的毫秒数. // 如果单纯执

Android CountDownTimer倒计时器的使用

http://blog.csdn.net/freesonhp/article/details/25904047 在平时我们编程的时候,经常会用到倒计时这个功能,很多人不知道Android已经帮封装好了一个类,往往都自己写.现在发现了这个类,大家共享一下: 在一个TextView不断显示剩下的时间,代码如下: [java] view plaincopy private TextView vertifyView; private CountDownTimer timer = new CountDow