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

Android实现秒表功能

34资源网2022-09-13382

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

分享给朋友:

相关文章

分享100句关于励志的经典语录

分享100句关于励志的经典语录

1、困难像弹簧,你弱它就强,你强它就弱。…

怎么用兴趣造句?15句关于兴趣的造句示例

怎么用兴趣造句?15句关于兴趣的造句示例

很多人不知道怎么用兴趣造句?下面小编整理了15句关于兴趣的造句示例希望对大家有所帮助。…

视频号怎么开通微信小商店技巧流程方法分享

视频号怎么开通微信小商店技巧流程方法分享

这两年直播的风口一直高居不下,微信终于也跟上了直播热潮,视频号直播新增购物车功能,已经开通了小商店的视频号,可以在直播中上架小商店商品,直播过程可以展示并售卖商品。视频号直播带货无疑让更多创作者加入其中,同时也意味着视频号功能的进一步完善,…

飞行汽车是一种应用层创新

飞行汽车是一种应用层创新

编者按:本文来自A轮财经,创业邦经授权发布。 作者|WX 今天在全球范围内,飞行汽车得到了越来越多的关注。 据摩根士丹利研报预计,2030年飞行汽车行业将形成3000亿美元的市场规模。2040年,该行业规模可能将达到1.5万亿美元。 作为新…

知识直播出圈:张朝阳的物理课里 藏着直播的另一种答案

知识直播出圈:张朝阳的物理课里 藏着直播的另一种答案

编者按:本文转自熊出墨请注意,作者彬彬,创业邦经授权转载。 大家都知道,声和光在不同的条件下传播速度会发生变化。但有没有想过,知识、信息的传播也是如此。 1970年,美国传播学者蒂奇纳等人的研究小组提出了知识鸿沟的理论假设:社会经济地位高的…

电脑屏幕变大了怎么还原(电脑屏幕变大的还原方法)

电脑屏幕变大了怎么还原(电脑屏幕变大的还原方法)

电脑桌面的图标莫名其妙变大了,桌面一下子就变的非常不习惯且难看。 这时该怎么解决电脑桌面图标莫名其妙变大的问题呢? 今天就让我们来给大家分享快速恢复桌面图标大小的方法吧。 首先,打开金山毒霸软件;若还未安装可前往官网下载安装。 进入首页的…