Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 527|回复: 0

Android 基础编程之十三(模拟/数字/线程小时钟设计)- &nbs

[复制链接]

该用户从未签到

发表于 2011-10-24 14:52:38 | 显示全部楼层 |阅读模式
模拟/数字/线程小时钟设计
AnalogClock 与 DigitalClock 的原理--线程时钟实现


①新建工程
②修改 man.xml 布局,添加一个 AnalogClock、一个 DigitalClock、一个 TextView

<?xml version="1.0" encoding="utf-8"?>

<AbsoluteLayout

android:id="@+id/widget0"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android">

<TextView

android:id="@+id/TextView_showTime"

android:layout_width="200px"

android:layout_height="39px"

android:textSize="25px"

android:layout_x="82px"

android:layout_y="222px">

</TextView>

<AnalogClock

android:id="@+id/Clock"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_x="82px"

android:layout_y="34px">

</AnalogClock>

<DigitalClock

android:id="@+id/DigitalClock01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="上午1:01"

android:textSize="25px"

android:layout_x="82px"

android:layout_y="300px">

</DigitalClock>

<TextView

android:id="@+id/widget46"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="模拟时钟"

android:layout_x="11px"



android:layout_y="46px">

</TextView>

<TextView

android:id="@+id/widget47"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="线程时钟"

android:layout_x="11px"

android:layout_y="228px">

</TextView>

<TextView

android:id="@+id/widget48"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="数字时钟"

android:layout_x="11px"

android:layout_y="308px">

</TextView>

</AbsoluteLayout>
复制代码③模拟时钟的实现不需要额外代码,只需要 UI 中添加,其自动显示时间
/*定义模拟时钟对象*/

AnalogClock myClock;

/*从XML中获取模拟时钟UI对象*/

myClock=(AnalogClock)findViewById(R.id.Clock);
复制代码


④数字时钟的实现也不需要额外代码,只需要 UI 中添加,其自动显示时间





/*定义数字时钟对象*/

DigitalClock myDigClock;

/*从XML中获取数字时钟UI对象*/

myDigClock=(DigitalClock)findViewById(R.id.DigitalClock01);
复制代码
⑤而使用线程实现的 TextView 时钟则需要线程 Thread、Handler(发送、处理消息)辅助实现

import android.os.Handler;

import android.os.Message;

public class Clock extends Activity implements Runnable{

public Handler myHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.gh);

myHandler = new Handler() {

@Override



public void handleMessage(Message msg) {

// TODO Auto-generated method stub

}

};

Thread myT = new Thread(this);

myT.start();

}

@Override

public void run() {

// TODO Auto-generated method stub

}

}
复制代码
⑥修改mianActivity.java,实现线程控制,以及模拟/数字时钟的实现

package zyf.three.clock;





/*导入要使用的包*/

import java.util.Calendar;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.AnalogClock;

import android.widget.DigitalClock;

import android.widget.TextView;





public class Clock extends Activity implements Runnable {

/* 定义要使用的类对象 */

private TextView showTime;// 显示进程时钟的TextView

AnalogClock myClock;// 模拟时钟

DigitalClock myDigClock;// 数字时钟

private final int msg_Key = 0x1234;// 发送的消息内容

public Handler myHandler;// 发送、处理消息的类

public Calendar myCalendar;// 日历类

private int my_Hour, my_Minute, my_Second;// 时、分、秒

private Thread myT;





@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

/* 导入主屏布局main.xml */

setContentView(R.layout.gh);

/* 从XML中获取模拟时钟UI对象 */



myClock = (AnalogClock) findViewById(R.id.Clock);

/* 从XML中获取数字时钟UI对象 */

myDigClock = (DigitalClock) findViewById(R.id.DigitalClock01);

/* 从XML中获取TextView UI对象 */

showTime = (TextView) findViewById(R.id.TextView_showTime);

/* 通过Handler 来接收进程所传递的信息并更新TextView */

myHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

/* 这里是处理信息的方法 */

// TODO Auto-generated method stub

super.handleMessage(msg);

switch (msg.what) {

case msg_Key:

/* 在这处理要TextView对象Show时间的事件 */

showTime.setText(my_Hour + " : " + my_Minute + " : "

+ my_Second);

break;





default:

break;

}

}

};

/* 通过进程来持续取得系统时间 */

myT = new Thread(this);

myT.start();

}





/* 实现一个Runable接口,实例化一个进程对象, 用来持续取得系统时间 */

@Override

public void run() {

// TODO Auto-generated method stub

try {

do {

/* 取得系统时间 */

long Time = System.currentTimeMillis();

myCalendar = Calendar.getInstance();

myCalendar.setTimeInMillis(Time);

my_Hour = myCalendar.get(Calendar.HOUR);

my_Minute = myCalendar.get(Calendar.MINUTE);

my_Second = myCalendar.get(Calendar.SECOND);

/* 让进程休息一秒 */

Thread.sleep(1000);



/* 重要关键程序:取得时间后发出信息给Handler */

Message msg = new Message();

msg.what = msg_Key;

myHandler.sendMessage(msg);

/* 重要关键程序:取得时间后发出信息给Handler */

} while (myT.interrupted() == false);

/* 当系统发出中断信息时停止本循环 */

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}
复制代码结果:  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 11:40 , Processed in 0.326385 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表