Android时分秒计时器的两种实现方法

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

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

<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改一下

<Chronometer 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(); } } } <?xml version="1.0" encoding="utf-8"?> <LinearLayout 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"> <Chronometer android:layout_width="match_parent" android:layout_height="wrap_content" android:format="00:00:00" android:gravity="center" android:id="@+id/timer"/> <Button android:layout_width="match_parent" android:onClick="btnClick" android:text="start" android:layout_height="wrap_content"/> <Button android:layout_width="match_parent" android:text="stop" android:onClick="stopClick" android:layout_height="wrap_content"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#959393" android:layout_marginBottom="20dp" android:layout_marginTop="20dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="00:00:00" android:gravity="center" android:id="@+id/text"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="开始" android:onClick="startClick"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="停止" android:onClick="stopClick1"/> </LinearLayout>

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

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

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

时间: 2024-10-24 02:37:09

Android时分秒计时器的两种实现方法的相关文章

Android时分秒计时器的两种实现方法_Android

可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲述一下了. <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:format="%s" android:id

Android 手机防止休眠的两种实现方法

Android 手机防止休眠的两种实现方法 实现这一功能的方法有两种, 一种是在Manifest.xml文件里面声明. 一种是在代码里面修改LayoutParams的标志位. 具体如下: 1.在Manifest.xml文件里面用user-permission声明.代码如下: < uses-permission android:name="android.permission.WAKE_LOCK" > < /uses-permission > 这种方法,在安装ap

Android实现图片叠加效果的两种方法_Android

本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Canvas constructor错误 Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.apple).copy(Bi

Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)_Android

本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView. 布局main.xml: <?xml version="1.0&qu

Android实现图片叠加效果的两种方法

本文实例讲述了Android实现图片叠加效果的两种方法.分享给大家供大家参考,具体如下: 效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Canvas constructor错误 Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.apple).copy(Bi

Android开发中播放声音的两种方法分析

本文实例讲述了Android开发中播放声音的两种方法.分享给大家供大家参考,具体如下: 在Android中,音频.视频等多媒体元素的加入,使得应用程序的用户体验更好.可以说,现在的手机,已经远远不只作为通信工具,更成为娱乐.办公的必备产品. Android提供了简单的音频API.一般大家使用的是MediaPlayer播放音频,这也是最常见的一种播放声音的工具.这种工具在互联网上有大量的实例,因此在此只做简单的介绍. 对播放行为的控制是三个大家非常熟悉的方法:start().stop()和paus

WPS演示制作PPT计时器的两种方法

  WPS演示制作PPT计时器的两种方法          1.准备好一个Flash计时动画,打开PPT文件后,依次单击"视图"菜单下的"母版/幻灯片母版"命令. 2.进入幻灯片母版视图,再单击"插入"菜单下的"Flash-"命令. 3.在弹出的"插入Flash动画"对话框中找到想要嵌入的动画后,单击"打开"按钮即可插入动画 (最后可提供下载这些计时器flash动画). 4.选中插入的F

Win7远程操作时提示“远程桌面服务当前正忙”两种解决方法

  Win7远程操作时提示"远程桌面服务当前正忙"两种解决方法           Win7系统远程桌面操作能够实现远程操控电脑,通过远程连接来进行一些控制,可是有些用户在进行远程连接的时候,输入账号密码无法进入,重新进入就会提示"由于远程桌面服务当前正忙,因此无法完成您尝试执行的任务",遇到这个问题该如何解决呢?下面小编给大家两种解决方法. 解决方法一 看一下你电脑任务管理器此项任务是否还在,如果在的话关掉就行了,很多时候是电脑没有反应过来造成的. 解决办法二 原

Android——全屏显示的两种方式

Android--全屏显示的两种方式 文章分类:移动开发 A.设置主题实现全屏 直接在AndroidManifest.xml文件中设定Activity主题为全屏模式 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 复制代码 B.代码实现全屏 代码实现需要分两步做,如下: 1.隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); 复制代码 2.隐藏状态栏 getWin