模拟实现一个时钟界面效果

android.os.Handler:通常产生的Thread对象在进程内同步调用System.currentTimeMillis()方法,这样可以取得系统时间。

java.lang.Thread:是联系Activity与Thread的桥梁。

android.os.Message:使用Message对象通知Handler对象,在收到Message对象后将时间变量的值显示在TextView中,这样就实现了数字时钟功能。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  android:id="@+id/widget27"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
>
<AnalogClock
  android:id="@+id/myAnalogClock"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
>
</AnalogClock>
<TextView
  android:id="@+id/myTextView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="TextView"
  android:textSize="20sp"
  android:textColor="@drawable/white"
  android:layout_gravity="center_horizontal"
>
</TextView>
</LinearLayout>




package com.EX030;

import android.app.Activity;
import android.os.Bundle;
/*这里我们需要使用Handler类与Message类来处理运行线程*/
import android.os.Handler;
import android.os.Message;
import android.widget.AnalogClock;
import android.widget.TextView;
/*需要使用Java的Calendar与Thread类来取得系统时间*/

import java.util.Calendar;
import java.lang.Thread;

import com.EX030.R;

public class EX030 extends Activity 
{
  /*声明一常数作为判别信息用*/
  protected static final int GUINOTIFIER = 0x1234;
  
  /*声明两个widget对象变量*/
  private TextView mTextView;
  public AnalogClock mAnalogClock;
  
  /*声明与时间相关的变量*/
  public Calendar mCalendar;
  public int mSecond;
  public int mMinutes;
  public int mHour;
  
  /*声明关键Handler与Thread变量*/
  public Handler mHandler;
  private Thread mClockThread;

  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    /*通过findViewById取得两个widget对象*/
    mTextView=(TextView)findViewById(R.id.myTextView);
    mAnalogClock=(AnalogClock)findViewById(R.id.myAnalogClock);
    
    /*通过Handler来接收运行线程所传递的信息并更新TextView*/
    mHandler = new Handler()
    {
      public void handleMessage(Message msg) 
      {
        /*这里是处理信息的方法*/
        switch (msg.what)
        { 
          case EX030.GUINOTIFIER:
          /* 在这处理要TextView对象Show时间的事件 */           
            mTextView.setText(mHour+" : "+mMinutes+":"+mSecond);
            break; 
        } 
        super.handleMessage(msg); 
      }
    };
    
    /*通过运行线程来持续取得系统时间*/
     mClockThread=new LooperThread();
     mClockThread.start();
  }
    
  /*改写一个Thread Class用来持续取得系统时间*/     
  class LooperThread extends Thread
  {
    public void run() 
    {
      super.run();
      try
      {
        do
        {
          /*取得系统时间*/
          long time = System.currentTimeMillis();
          /*通过Calendar对象来取得小时与分钟*/ 
          final Calendar mCalendar = Calendar.getInstance();
          mCalendar.setTimeInMillis(time);
          mHour = mCalendar.get(Calendar.HOUR);
          mMinutes = mCalendar.get(Calendar.MINUTE);
          mSecond=mCalendar.get(Calendar.SECOND);
          /*让运行线程休息一秒*/
          Thread.sleep(1000); 
           /*重要关键程序:取得时间后发出信息给Handler*/
           Message m = new Message();
           m.what = EX030.GUINOTIFIER;
           EX030.this.mHandler.sendMessage(m);
        }while(EX030.LooperThread.interrupted()==false);
        /*当系统发出中断信息时停止本循环*/
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
    }
  }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值