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

Android实现秒表功能

34资源网2022-09-13348

本文实例为大家分享了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

分享给朋友:

相关文章

开一家一元水洗店创业的点子分享

开一家一元水洗店创业的点子分享

洗衣机是很多人家中必备的电器。但是在很多经济欠发达的地区,也有很多人家里没有洗衣机。…

​京东钢镚怎么使用?教你用京东钢镚的支付的方法教程

​京东钢镚怎么使用?教你用京东钢镚的支付的方法教程

京东钢镚怎么使用?很多朋友看到自己的京东钱包里面有京东钢镚,不知道京东钢镚怎么使用,在使用京东钢镚之前,一定要要先了解清楚京东钢镚使用条件有哪些,下面开淘小编来介绍一下京东钢镚怎么使用?如何用你的京东钢镚支付购买商品的方法教程分享。…

抖音如果让我遇见你而你正当年轻是什么歌曲?

抖音如果让我遇见你而你正当年轻是什么歌曲?

《抖音》短视频平台上有不少老歌经过翻唱火了,可能刚好歌词传递的情感引起了网友们的共鸣,而最近比较火的一首歌歌词大概是如果让我遇见你而你正当年轻,好多网友不知道首是什么歌曲?小编刚开始也不知道,后来经过搜索得知这是一首老歌《怨苍天变了心》,是…

抖音传话筒项目(傻瓜式复制粘贴轻松月入3000+)

抖音传话筒项目(傻瓜式复制粘贴轻松月入3000+)

可能你觉得你写不出优秀的文案,可能你觉得你没办法配音,可能你觉得不好意思露脸,但又想通过抖音来赚钱,那么今天给大家来说说这个抖音传话筒项目,只需要复制粘贴,一个月轻松赚到3000+,无需露脸配音,更加不需要写文案。…

小型电冰箱什么牌子好?现在口碑最好的冰箱推荐

小型电冰箱什么牌子好?现在口碑最好的冰箱推荐

海尔冰箱全球公认的质量很不错的冰箱,海尔冰箱优点是:微霜,制冷效果不错;节能省电,保湿效果不错;海尔冰箱是十大品牌之首,全球销量的第一梯队的佼佼者。海尔冰箱外观十分好看,海尔冰箱款式几乎都很新颖,质量好,制冷情况好,用了一段时间,制冷情况稳…

mac地址的作用是什么(理解mac地址的作用实验报告)

mac地址的作用是什么(理解mac地址的作用实验报告)

我们上网时会发现电子设备同时有IP地址和MAC地址,为什么上网会需要两个地址呢?…