计时器Chronometer和时钟(AnalogClock和DigitalClock)
计时器Chronometer和时钟(AnalogClock和DigitalClock)
(1)Android提供了两个时钟组件:AnalogClock和DigitalClock,DigitalClock继承了TextView组件,也就是说它本身是一个文本框,只是他里面的内容总是当前时间,所以为DigitalClock设置android:text属性没有作用;AnalogClock继承了View组件,重写了View的OnDraw方法,它会在View上绘制模拟时钟。
(2)AnalogClock与DigitalClock的异同:它们都会显示当前的时间。DigitalClock显示数字时钟,会显示当前时间的秒数;AnalogClock显示模拟时钟,不会显示当前时间的秒数。
(3)Android还提供了一个计时器组件:Chronometer,该组件和DigitalClock都继承自TextView,所以它们都会显示出一段文本,但是Chronometer并不显示当前时间,它显示的是从某一个起始时间开始,一共过去了多长时间。
-------案例:
(1)main.xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" > <!-- 定义模拟时钟 --> <AnalogClock android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 定义数字时钟 --> <DigitalClock android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14pt" android:textColor="#f0f" android:drawableRight="@drawable/ic_launcher" /> <!-- 计时器 继承自TextView组件,并不是显示当前的时间,显示的是从某个起始时间开始一共过去多长时间--> <Chronometer android:id="@+id/meter" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 点击按钮开始计时 --> <Button android:id="@+id/but_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始"/> </LinearLayout>
(2)MainActivity.java文件
package com.yby.clock; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; import android.widget.Chronometer.OnChronometerTickListener; import com.yby.clock.R; /** * 时钟AnalogClock和DigitalClock * @author yinbenyang * DigitalClock继承自TextView,显示的总是当前的时间,数字时钟,可以显示当前的秒数 * AnalogClock继承自View组件,重写了View的OnDraw方法,绘制模拟时钟,不会显示当前的秒数 */ public class MainActivity extends Activity{ private Button but_start; private Chronometer meter; /** * 案例:手机里的劳力士 * SystemClock是一个获取系统时间的工具类 */ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); but_start = (Button) findViewById(R.id.but_start); meter = (Chronometer) findViewById(R.id.meter); but_start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //设置开始计时的时间 meter.setBase(SystemClock.elapsedRealtime()); //启动计时器 meter.start(); //将按钮置为禁用 but_start.setEnabled(false); } }); //为Chronometer绑定时间监听器 meter.setOnChronometerTickListener(new OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer chronometer) { // TODO Auto-generated method stub //计时超过20s if(SystemClock.elapsedRealtime()-meter.getBase()>20*1000){ //停止计时器 meter.stop(); //设置按钮为启用 but_start.setEnabled(true); } } }); } }
(3)效果图:
成功根本没有什么秘诀可言,如果真是有的话,就是两个:第一个就是坚持到底,永不放弃;第二个是当你想放弃的时候,回过头来看看第一个秘诀:坚持到底,永不放弃