Android实现秒表功能

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

}

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

(0)

相关推荐

  • Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下 一.自定义ChronometerView 继续自TextView 主要原理:先设置一个基准倒计时时间mBaseSeconds,内置handler 每隔1s发送一个空消息,mRemainSeconds--,同时刷新界面视图,回调给外部调用者,只到为零.外部调用者可通过start()/pause()/stop()来控制计时器的工作状态. 可以app中发送短信验证码的场景为例

  • Android实现的秒表计时器示例

    本文实例讲述了Android实现的秒表计时器.分享给大家供大家参考,具体如下: package com.liu.time; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; imp

  • Android实现简易秒表功能

    本文实例为大家分享了Android实现秒表功能的具体代码,供大家参考,具体内容如下 今天为了给师弟们讲安卓,花了10分钟写了一个简易的秒表app,现贴出代码,供各位刚入门以及还未入门的同学们参考 第一步:布局activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android

  • Android实现秒表功能

    本文实例为大家分享了Android实现秒表功能的具体代码,供大家参考,具体内容如下 设计完成一个秒表,具备启停功能,正确使用工作线程完成界面刷新 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app

  • Android实现APP秒表功能

    本文实例为大家分享了Android实现APP秒表功能的具体代码,供大家参考,具体内容如下 这几天一直在看安卓,也正好赶上老师布置的作业,所以就做了一个秒表.自己参考了一下别人的图标,有了一些灵感所以顺便也设计了一下界面.下面先贴一下秒表的界面: 打开秒表后的第一个界面 点击开始计时,开始键变为暂停,记录和停止开始变实: 点击记录: 记录满了之后自动上移,通过滑动可以查看前面的: 点击暂停: 停止: 重新开始和记录: 双击返回键退出: 下面贴出Activity的代码: package com.ex

  • Android 偷拍功能实现(手机关闭依然拍照)详解及实例代码

     Android 偷拍功能/手机关闭能拍照 效果如下: 其实偷拍与偷录实现方式是一样的,都是使用到的WindowManager来绘制桌面小控件的原理.那我就不多说了- 一.首先我们需要一个SurfaceView: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android实现记事本功能(26)

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 MainActivity.java代码: package siso.smartnotef.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.

  • Android登录注册功能 数据库SQLite验证

    本文实例为大家分享了Android登录注册功能的具体代码,供大家参考,具体内容如下 展示效果 代码区 MainActivity(登录方法) public class MainActivity extends AppCompatActivity { @BindView(R.id.editText) EditText editText; @BindView(R.id.editText2) EditText editText2; @BindView(R.id.button) Button button

  • Android实现搜索功能并本地保存搜索历史记录

    本文实例为大家分享了Android实现搜索功能,并且需要显示搜索的历史记录,供大家参考,具体内容如下 效果图: 本案例实现起来很简单,所以可以直接拿来嵌入项目中使用,涉及到的知识点: - 数据库的增删改查操作 - ListView和ScrollView的嵌套冲突解决 - 监听软键盘回车按钮设置为搜索按钮 - 使用TextWatcher( )实时筛选 - 已搜索的关键字再次搜索不重复添加到数据库 - 刚进入页面设置软键盘不因为EditText而自动弹出 代码 RecordSQLiteOpenHel

  • Android ActionBar搜索功能用法详解

    本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意点: 首先要吐槽一下Android的官方Guide文档 ,关于用法讲得不明确,可能是一直没更新的原因吧. 本来照着文档搞了一下,hint死活出不来,也无法跳转到搜索结果Activity. StackOverflow也有人提出了这个问题,答案说得很明白 - 参考链接. 正确用法 1. 在AndroidManifest.xml中为提供SearchView

  • Android使用Sensor感应器实现线程中刷新UI创建android测力计的功能

    本文实例讲述了Android使用Sensor感应器实现线程中刷新UI创建android测力计的功能.分享给大家供大家参考,具体如下: 前面一篇<Android基于Sensor感应器获取重力感应加速度的方法>我们介绍了sensor的基本知识以及一个使用其中加速度感应器获取数据的例子. 前面提到过一个问题,就是说感应器刷新频率太快,假如我们要做一个UI中,需要根据方向数据绘制一个一个移动的箭头,那么就要太过频繁的刷新绘制界面,占用很多的资源,体验性也会很差,<android 2高级编程>

  • Android拨打电话功能实例详解

    本文实例分析了Android拨打电话功能.分享给大家供大家参考,具体如下: 打电话是手机的一个最基本的功能,现在android智能手机非常流行,里面有多种多样的精彩的手机功能,但是android手机如何实现打电话这个基本功能呢?现以实例说明如下.首先呈上程序: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.content.Int

随机推荐