计时器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)效果图:

计时器Chronometer和时钟(AnalogClock和DigitalClock)

 

你可能感兴趣的:(Lock)