当前位置:首页 > 谈天说地

Android实现秒表功能

34资源网2022-09-13316

本文实例为大家分享了android实现秒表功能的具体代码,供大家参考,具体内容如下

设计完成一个秒表,具备启停功能,正确使用工作线程完成界面刷新

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

   <linearlayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       android:gravity="center">

       <textview
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:text="秒表"
           android:textsize="30sp" />
   </linearlayout>
    <linearlayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

        <textview
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/_00_00_00"
            android:textsize="30sp"
            android:id="@+id/clock" />
    </linearlayout>
    <linearlayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center">

        <button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="清零"
            android:id="@+id/init" />

        <button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="计时"
            android:id="@+id/start" />

        <button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="停止"
            android:id="@+id/stop" />
    </linearlayout>


</linearlayout>

androidmanifest.xml

将activity,service在andoidmainfest.xml中注册

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ex_5">

    <application
        android:allowbackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundicon="@mipmap/ic_launcher_round"
        android:supportsrtl="true"
        android:theme="@style/apptheme">
        <activity android:name=".mainaactivity">
            <intent-filter>
                <action android:name="android.intent.action.main" />

                <category android:name="android.intent.category.launcher" />
            </intent-filter>
        </activity>
        <service android:name=".timeservice">

        </service>
    </application>

</manifest>

timeservice.java

service服务

package com.example.ex_5;

import android.app.service;
import android.content.intent;
import android.os.ibinder;
import android.util.log;
import androidx.annotation.nullable;
import java.util.date;

public class timeservice extends service {
    @nullable

    private date starttime = new date();
    private long diff;
    public thread workthread;

    private runnable backgroundwork = new runnable() {
        @override
        public void run() {
            while(!thread.interrupted()){
                date endtime = new date();
                diff = endtime.gettime()-starttime.gettime();
                mainactivity.updategui(diff);
                log.i("timeservice:the diff is",string.valueof(diff));
                try {
                    thread.sleep(0);
                } catch (interruptedexception e) {
                    e.printstacktrace();
                }
            }
        }
    };

    @override
    public void oncreate() {
        super.oncreate();
        log.i("timeservice","oncreate");
        workthread=new thread(null,backgroundwork,"workthread");
    }

    @override
    public void onstart(intent intent, int startid) {
        super.onstart(intent, startid);
        if(!workthread.isalive()){
            workthread.start();
        }
        log.i("timeservice","onstart");
    }

    @override
    public void ondestroy() {
        super.ondestroy();
        mainactivity.updategui(0);
        mainactivity.updatediff(diff);
        workthread.interrupt();
        log.i("timeservice","ondestroy");

    }


    public ibinder onbind(intent intent) {
        return null;
    }
}

mainactivity.java

注册按钮响应事件,更新ui界面

package com.example.ex_5;

import android.content.intent;
import android.os.bundle;
import android.os.handler;
import android.util.log;
import android.view.view;
import android.widget.button;
import android.widget.textview;

import androidx.appcompat.app.appcompatactivity;

import java.net.serversocket;

public class mainactivity extends appcompatactivity {
    private static handler handler = new handler();
    private static textview labelview = null;
    private static string time;
    private static long _diff = 0;


//更新界面
    public static void updategui(long diff) {
        diff += _diff;
        int hours = (int) diff / (1000 * 60 * 60);
        int minutes = (int) (diff - (hours * (1000 * 60 * 60))) / (1000 * 60);
        int seconds = (int) (diff - (hours * (1000 * 60 * 60)) - (minutes * (1000 * 60))) / 1000;
        time = hours + ":" + minutes + ":" + seconds;
        handler.post(refreshlable);
    }
//供停止功能使用,用于记录服务结束之时的时间
    public  static void updatediff(long diff){
        _diff = diff;
    }
//settext
    public static runnable refreshlable = new runnable() {
        @override
        public void run() {
            labelview.settext(time);
        }
    };


    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        button initbutton = findviewbyid(r.id.init);
        final button startbutton = findviewbyid(r.id.start);
        button stopbutton = findviewbyid(r.id.stop);
        labelview = findviewbyid(r.id.clock);

        final intent serviceintent = new intent(this, timeservice.class);
        startbutton.setonclicklistener(new button.onclicklistener() {

            public void onclick(view view) {
                log.i("mainactivity","clickstartbutton");
                startservice(serviceintent);
            }
        });
        stopbutton.setonclicklistener(new button.onclicklistener(){

            @override
            public void onclick(view v) {
                log.i("the behead diff is",string.valueof(_diff));
                log.i("mainactivity","clickstopbutton");
                stopservice(serviceintent);
            }
        });
        initbutton.setonclicklistener(new button.onclicklistener(){
            @override
            public void onclick(view v) {
                log.i("mainactivity","clickinitbutton");
                _diff = 0;
                string text = "00:00:00";
                labelview.settext(text);
                stopservice(serviceintent);
            }
        });
    }


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/22059.html

分享给朋友:

相关文章

女人励志语录20句,满满的正能量句子

女人励志语录20句,满满的正能量句子

1、每一个太阳升起,老想带去期待的问候:让每日的气体全是清爽让每日的情绪全是伸展让每日的获得全是丰富!…

30句用喜从天降造句的语句

30句用喜从天降造句的语句

1、让他去泰山旅游,那真是喜从天降。…

用白面书生造句,看看这七句有哪句适合你?

用白面书生造句,看看这七句有哪句适合你?

1、他是个手无缚鸡之力的白面书生。…

适合年轻人创业项目,投资小又赚钱多的项目推荐

适合年轻人创业项目,投资小又赚钱多的项目推荐

社会在发展,科技在更新,生活也在发生着翻天覆地的变化。但是,唯一不变的是,年轻人创业的心,一直都没有变过。每个时代都会有很多想创业的年轻人,只是每个时代的年轻人创业项目都有所不同,那么,今天我们就说说适合现在年轻人创业的项目。…

单身想找个女朋友,男的去哪里可以找个女朋友

单身想找个女朋友,男的去哪里可以找个女朋友

现在中国的男女比例失调,男的光棍要比女的多出3000w以上,这是个什么概念?代表着有3000w人是找不到对象的。所以很多单身男的就开始发愁了,单身想找个女朋友究竟到哪里找呢?说实话,小编也是一名单身汉,也正在找女朋友,虽然说,我没有找到女朋…

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡智能拖地机是东莞市宝联电子科技有限公司旗下产品,隶属于香港概念数码科技有限公司,其主要研发机器人吸尘器等高科技领域家居产品,想知道卡卡智能拖地机好用吗,看看下面是网友使用koko卡卡智能拖地机的相关介绍,希望对大家有所帮助。1、…