android之计时器(Chronometer)的使用以及常用的方法
时间:2021-05-26 12:27:33
在Android的SDK中,为我们提供了一个计时器,这个计时器称为Chronometer,我们可以成它为Android的一个组件,同时它也具备自己独有的方法。下面我们举例介绍下这个计时器的使用以及常用的方法。
跟其他UI组件一样,当我们要使用它的时候,在布局文件中对应的位置声明定义计时器的位置与属性。
<Chronometer
android:id=”@+id/chronometer”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
/>
在程序中使用定义的计时器,并设置显示时间格式。
chronometer = (Chronometer) findViewById(R.id.chronometer);
chronometer.setFormat(“计时时间:(%s)”);
这样程序运行后就会显示以上设定的计时器内容,另外我们在程序中可以通过以下几个常用的计时器方法控制计时器的计时工作。
A、Chronometer.start();//计时开始
B、Chronometer.stop();//暂停计时
C、Chronometer.setBase(SystemClock.elapsedRealtime());//复位计时器,停止计时
Android就是通过这样的一个控件,让我们可以轻松地在程序中实现计时的工作,从而免去复杂的线程与多余的代码编写,节省了大量的开发时间。
Android之计时器(Chronometer)的用法
第一步:布局文件:
main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Chronometer
android:id="@+id/myChronometer"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止" />
<Button
android:id="@+id/btn_base"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="复位" />
<Button
android:id="@+id/btn_format"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="格式化" />
</LinearLayout>
</LinearLayout>
第二步:MainActivity
代码如下:
package net.loonggg.chronometer;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
public class MainActivity extends Activity {
private Vibrator vibrator;
private Chronometer chronometer; // 计时组件
private Button btn_start;
private Button btn_stop;
private Button btn_base;
private Button btn_format;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);// 获取震动服务
chronometer = (Chronometer) findViewById(R.id.myChronometer);
chronometer
.setOnChronometerTickListener(new OnChronometerTickListenerImpl()); // 给计时组件设置舰艇对象
btn_start = (Button) findViewById(R.id.btn_start);
btn_stop = (Button) findViewById(R.id.btn_stop);
btn_base = (Button) findViewById(R.id.btn_base);
btn_format = (Button) findViewById(R.id.btn_format);
btn_start.setOnClickListener(new ButtonClickListener());
btn_stop.setOnClickListener(new ButtonClickListener());
btn_base.setOnClickListener(new ButtonClickListener());
btn_format.setOnClickListener(new ButtonClickListener());
}
public class OnChronometerTickListenerImpl implements // 计时监听事件,随时随地的监听时间的变化
OnChronometerTickListener {
@Override
public void onChronometerTick(Chronometer chronometer) {
String time = chronometer.getText().toString();
if ("00:05".equals(time)) {// 判断五秒之后,让手机震动
vibrator.vibrate(new long[] { 1000, 10, 100, 10 }, 0);// 设置震动周期和是否循环震动,如果不想循环震动把0改为-1
}
}
}
public class ButtonClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
chronometer.start();// 开始计时
break;
case R.id.btn_stop:
chronometer.stop();// 停止计时
break;
case R.id.btn_base:
chronometer.setBase(SystemClock.elapsedRealtime());// 复位键
break;
case R.id.btn_format:
chronometer.setFormat("显示时间:%s.");// 更改时间显示格式
break;
default:
break;
}
}
}
}
第三步:注册权限:
<uses-permission android:name="android.permission.VIBRATE" />
囧神的世界你不懂,虫哥的生活你没有,只有程序猿的世界大家才知道。程序猿们,为了自己的精彩世界奋斗吧,努力吧!加油……
标签:计时器,Chronometer
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java中类的加载顺序剖析(常用于面试题)
2022-07-26 16:10:48
![](https://img.aspxhome.com/file/2023/3/125603_0s.jpg)
SpringCloud重试机制配置详解
2023-05-13 23:48:46
![](https://img.aspxhome.com/file/2023/0/69710_0s.png)
mybatis拦截器与分页插件实例教程
2021-11-16 15:41:48
![](https://img.aspxhome.com/file/2023/7/91067_0s.jpg)
WPF+ASP.NET SignalR实现简易在线聊天功能的示例代码
2023-01-09 09:34:07
![](https://img.aspxhome.com/file/2023/5/88355_0s.png)
C#中Predicate<T>与Func<T, bool>泛型委托的用法实例
2022-11-14 13:28:46
讲解使用Docker搭建Java Web运行环境
2023-02-05 15:58:12
![](https://img.aspxhome.com/file/2023/1/80301_0s.png)
springboot依赖冲突问题及解决过程
2023-03-13 11:49:53
![](https://img.aspxhome.com/file/2023/2/129252_0s.jpg)
Java实现线程同步方法及原理详解
2021-07-29 21:28:13
![](https://img.aspxhome.com/file/2023/2/70302_0s.png)
Java简单实现约瑟夫环算法示例
2023-04-04 09:59:41
![](https://img.aspxhome.com/file/2023/2/81342_0s.png)
C#如何绑定多个按钮到同一个事件
2022-09-09 16:20:12
android连接wifi时获取广播地址代码
2022-11-20 13:08:32
Flutter之Timer实现短信验证码获取60s倒计时功能的代码
2023-07-20 20:00:30
![](https://img.aspxhome.com/file/2023/8/89528_0s.gif)
Android Studio打包.so库到apk中实例详解
2022-06-25 19:19:25
![](https://img.aspxhome.com/file/2023/4/113434_0s.png)
IO中flush()函数的使用代码示例
2023-11-27 03:49:00
![](https://img.aspxhome.com/file/2023/4/60044_0s.gif)
java弹幕小游戏1.0版本
2021-12-06 04:42:48
Java Annotation(Java 注解)的实现代码
2023-01-09 00:36:17
![](https://img.aspxhome.com/file/2023/2/61532_0s.png)
基于C#的UDP协议的同步通信实现代码
2023-11-14 09:13:58
java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)
2022-10-22 10:36:31
![](https://img.aspxhome.com/file/2023/1/72901_0s.png)
Java中获取泛型类型信息的方法
2022-06-30 16:06:34
关于SpringBoot整合RabbitMQ实现死信队列
2022-03-29 23:27:05
![](https://img.aspxhome.com/file/2023/8/94378_0s.png)