可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器。这个东西其实实现起来非常简单。

只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了。

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:format="%s"

android:id="@+id/timer"/>

是的,就这么简单。java代码同样

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

timer = (Chronometer) findViewById(R.id.timer);

}

public void btnClick(View view) {

timer.setBase(SystemClock.elapsedRealtime());//计时器清零

timer.start();

}

超简单有木有?看看运行结果:

或许你会说,这个要是需要显示上时间怎么弄呢?不急不急,两行代码就能解决的事情。

public void btnClick(View view) {

timer.setBase(SystemClock.elapsedRealtime());//计时器清零

int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 60);

timer.setFormat("0"+String.valueOf(hour)+":%s");

timer.start();

}

public void stopClick(View view) {

timer.stop();

}

恩,对,就是 这么简单,不过别忘了把xml的format改一下

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:format="00:00:00"

android:gravity="center"

android:id="@+id/timer"/>

是的,你没有看错,这样就可以了,不信,你看!

就和你想象的录像上方的时间一样有木有?恩。你前面设置一个圆圈,再设置计时器颜色就和它一样有逼格了。

而或许你并不喜欢用这种方式,当然用handler+timer+timerTask的方式也是可以的啦。由于太简单,就直接上代码了。

package com.example.nanchen.timerdemo;

import android.os.SystemClock;

import android.support.annotation.Nullable;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Chronometer;

import android.widget.TextView;

import java.util.Locale;

import java.util.Timer;

import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

private Chronometer timer;

private Timer timer1;

private TextView textView;

private TimerTask timerTask;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

timer = (Chronometer) findViewById(R.id.timer);

textView = (TextView) findViewById(R.id.text);

timer1 = new Timer();

}

public void btnClick(View view) {

timer.setBase(SystemClock.elapsedRealtime());//计时器清零

int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 60);

timer.setFormat("0"+String.valueOf(hour)+":%s");

timer.start();

}

public void stopClick(View view) {

timer.stop();

}

public void startClick(View view) {

timerTask = new TimerTask() {

int cnt = 0;

@Override

public void run() {

runOnUiThread(new Runnable() {

@Override

public void run() {

textView.setText(getStringTime(cnt++));

}

});

}

};

timer1.schedule(timerTask,0,1000);

}

private String getStringTime(int cnt) {

int hour = cnt/3600;

int min = cnt % 3600 / 60;

int second = cnt % 60;

return String.format(Locale.CHINA,"%02d:%02d:%02d",hour,min,second);

}

public void stopClick1(View view) {

if (!timerTask.cancel()){

timerTask.cancel();

timer1.cancel();

}

}

}

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.nanchen.timerdemo.MainActivity">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:format="00:00:00"

android:gravity="center"

android:id="@+id/timer"/>

android:layout_width="match_parent"

android:onClick="btnClick"

android:text="start"

android:layout_height="wrap_content"/>

android:layout_width="match_parent"

android:text="stop"

android:onClick="stopClick"

android:layout_height="wrap_content"/>

android:layout_width="match_parent"

android:layout_height="1dp"

android:background="#959393"

android:layout_marginBottom="20dp"

android:layout_marginTop="20dp"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="00:00:00"

android:gravity="center"

android:id="@+id/text"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="开始"

android:onClick="startClick"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="停止"

android:onClick="stopClick1"/>

简单运行下方用timer实现的效果:

想必大家到这样都会有了自己的理解,android 官方的Chronometer方式只是为了做一个计时器,而我们采用自己用Timer和TimerTask方式可以更加自主,因为你可以想从什么时间开始计时就从什么时间开始计时,计时方式想顺计时倒计时都不是难事儿,甚至各种浮夸的隔两秒,隔三秒,隔n秒都是可以的,具体使用就看你选择咯~~

以上所述是小编给大家介绍的Android时分秒计时器的两种实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

android 毫秒 计时器,Android时分秒计时器的两种实现方法相关推荐

  1. java 计时 timeclock_计时器的time_t和clock_t 的两种实现方法(推荐)

    想给自己初步完成的相空间搜索算法计算一下运行时间,于是尝试了如下使用 time_t 类型的方式 #include #include #include #include "StateFunct ...

  2. [Win+Python]使用python接口测试时302重定向的两种处理方法

    目录 前言 1 接口简介 2 代码实现 2.1 自动重定向 2.2 跟随重定向 前言 我将在本文中简单介绍使用python进行接口测试时,遇到302重定向时的一些测试心得. 本文涉及实例中的一些关键信 ...

  3. vue js时分秒计时器_Vue js框架的倒数计时器

    vue js时分秒计时器 VUE倒计时 (vue-count-down-timer) This is a count down timer for Vue js framework. This lib ...

  4. 将毫秒转换为年月日时分秒

    translateTime(time) {//将毫秒转换为年月日时分秒     if (!time) {       return "";     } else {       l ...

  5. js实现将天时分秒转化成毫秒;将毫秒转化成天时分秒

    由于功能比较简单,那就直接上代码吧! // 时间转为毫秒 timeToMillisec() {//比如时间是7天2小时14分36秒var dateInfo = {days: 7,hours: 2,mi ...

  6. Android中实现SQLite数据库CRUD操作的两种方式

    Android中实现SQLite数据库CRUD操作的两种方式 SQLite是一款轻量级的关系型数据库,具有运行速度.占用资源少的特点.通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用.SQ ...

  7. android中view手势滑动冲突的两种解决方法

    android中view手势滑动冲突的解决方法,主要解决方法有两种,外部和内部拦截.有需要的可以参考下. Android手势事件的冲突跟点击事件的分发过程息息相关,由三个重要的方法来共同完成,分别是: ...

  8. (最新react-native-0.59.5) 如何将ReactNative项目集成到现有得Android项目中(两种实现方法之一)

    背景:最近在学习React-Native相关的知识,有个需求,如果已经存在一个成熟的Android 或者 IOS项目,如何实现在后续的开发中用RN来实现部分功能.再此我只是讲解一下Android de ...

  9. android studio gradle 自动更新,android studio gradle 两种更新方法更新

    又快一年没有使用AS了,正好要查看一个Android项目代码,干脆升级到新版试试看新变化,旧版本为3.1.2,目前最新版本为3.4.2,AS的升级是很简单的直接update等待即可. 升级完了,打开G ...

最新文章

  1. 更新ADT到Android L的方法
  2. 【铜】第174-9篇 一对一视频录制(九)一对多学生端删除白板及nginx下配CI
  3. Linux下批量替换文件内容方法
  4. office 安装错误 1920 osppsvc服务无法启动 failed to start
  5. 『飞秋』Html.Label的缺陷及补救办法
  6. CVPR 2020 论文大盘点-超分辨率篇
  7. iQOO Neo5活力版或本月发布:搭载骁龙870+高刷LCD屏
  8. 在Master page 里 CompositeControl 的事件失效了
  9. jquery动态添加Div
  10. 计算机学院少女节条幅,女生节条幅大战又打响了!哪个高校条幅标语最撩人 网友酸了...
  11. 算法分析与设计实验报告四——回溯法实验
  12. (20200420已解决)InfluxDB时间显示格式
  13. 未来6英寸主战场,碳化硅-精密划片机
  14. 将旧笔记本的硬盘DIY成移动硬盘
  15. 笔记本添加外置显示器
  16. 计算文本大小,将汉字转拼音
  17. python运行cmd命令和opencv搭建_Python让蔡徐坤在我的命令行里打篮球!
  18. 多功能拓展坞设计CS5266|CapstoneCS5266带PD多合一拓展坞方案电路|CS5266方案电路图
  19. 如何确定EINT中断唤醒源
  20. 【接口幂等性】使用token,Redis保证接口幂等性

热门文章

  1. 删除的微信聊天记录如何恢复
  2. HackerRank Nested Lists
  3. VC++操作Excel 2007
  4. linux命令-- Unix crontab at 定时任务命令 .
  5. 进原神显示服务器错误黑屏,《原神》数据异常怎么办 数据异常问题解决方法...
  6. CAPL学习之路-测试功能集函数(测试报告部分)
  7. 嵌入式Linux 多线程串口通讯
  8. Visual C++程序设计——MFC整理笔记
  9. conda env create -f environment.yml报错ResolvePackageNotFound和Found conflicts的解决方案【已解决】
  10. mysql java 解决幻读_MySQL 是如何解决幻读的