Android开发实例之小人时钟
资深小弟@2012-5-10
【写在前面】
我开始关注Android也不过是大约一年前的事,可那时在安装开发环境时遇到重挫,怎么着也没安装成功,无奈之下只好作罢。今年五一放假在家抱着试一试的心态打算重拾Android,没想到开发环境安装得非常顺利,这一下子就点燃了我一年前的热情,于是趁热打铁,一边找来几本Android入门的电子书狂啃,一边照葫芦画瓢就开始了我的Android 应用程序开发之旅。几番编码下来,算是摸着点门道了,碰巧公司有个同事是个安卓控,在网上看到一款小人时钟的网页程序(如下截图),觉得非常有意思,可是遍寻安卓市场,却没发现哪儿能够下载,遂鼓动我开发一个。可怎么说我也是刚开始踏上Android开发的漫漫征程,毕竟经验不足,然而初生牛犊不怕虎,说干就开干了。
小人时钟截图
说实话,这个实例对于那些Android大虾们来说,不值一提。这个实例与其说是写给像我一样的广大菜鸟们,倒不如说是写给岁月的一曲离歌---若干年后,就让我们在记忆的尘埃里去寻找那消逝但美丽的青春。
【开发进行时】
我的开发环境是Eclipse Classic 3.7.2+Android SDK 2.3.3,具体安装过程在网上一搜一大堆,这儿就不多说了。
首先,打开Eclipse开发环境,新建一个工程,命名为”LittlePersonClock”。(Eclipse 的使用,如怎么建立工程,添加文件等操作,也不在这儿介绍了)。
然后,将小人时钟的各个数字和“:”截图做成合适的大小(根据分辨率),如下图所示,分别命名为colon.png、n0.png……n9.png,在项目的res下新建一文件夹drawable,之后将这11张图片存放到这个drawable文件夹下面。
然后在main.xml布局文件中采用相对布局(RelativeLayout)方式,增加8个ImageView 和一个Button,内容如下:
//以下是main.xml的内容
xmlns:android="https://www.wendangku.net/doc/9814276597.html,/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:background="#FFFFFFFF"> android:id="@+id/iHourHigh" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/iHourLow" android:layout_marginTop="100dip" android:layout_marginLeft="10dip" android:src="@drawable/n0"> android:id="@+id/iHourLow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/tColonHM" android:layout_marginLeft="1dip" android:layout_marginTop="100dip" android:layout_toRightOf="@id/iHourHigh" android:src="@drawable/n1"> android:id="@+id/tColonHM" android:layout_marginTop="100dip" android:src="@drawable/colon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iHourLow" android:layout_marginLeft="1dip"/> android:id="@+id/iMinuteHigh" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/btnReturn" android:layout_marginLeft="1dip" android:layout_marginTop="100dip" android:layout_toRightOf="@id/tColonHM" android:src="@drawable/n2"> android:id="@+id/iMinuteLow" android:src="@drawable/n3" android:layout_marginTop="100dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iMinuteHigh" android:layout_marginLeft="1dip"> android:id="@+id/tColonMS" android:layout_marginTop="100dip" android:src="@drawable/colon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iMinuteLow" android:layout_marginLeft="1dip"/> android:id="@+id/iSecondHigh" android:src="@drawable/n5" android:layout_marginTop="100dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/tColonMS" android:layout_marginLeft="1dip"> android:id="@+id/iSecondLow" android:src="@drawable/n6" android:layout_marginTop="100dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iSecondHigh" android:layout_marginLeft="1dip">
然后在代码LittlePersonClock.java中具体实现小人时钟。
//以下是源代码
package com.littlepersonclock.kernel;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class LittlePersonClock extends Activity {
private ImageView ivhh=null,ivhl=null;
private ImageView ivmh=null,ivml=null;
private ImageView ivsh=null,ivsl=null;
private Button btnExit=null;
private Timer timer=new Timer();
int i=0,hour,minute,second;
Calendar c=null;
int amorpm=0;
final int
did[]={R.drawable.n0,R.drawable.n1,R.drawable.n2,R.drawable.n3,R.draw able.n4,
R.drawable.n5,R.drawable.n6,R.drawable.n7,R.drawable.n8,R.drawable.n9 };
//实际上的用法应该通过配合Handler来实现timer功能,这跟Android的线程安全有关! Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
c=Calendar.getInstance();
amorpm = c.get(Calendar.AM_PM);
hour = c.get(Calendar.HOUR);
if(amorpm==Calendar.PM)
hour+=12;
minute = c.get(Calendar.MINUTE);
second = c.get(Calendar.SECOND);
ivhh.setImageResource(did[(int)(hour/10)]);
ivhl.setImageResource(did[hour%10]);
ivmh.setImageResource(did[(int)(minute/10)]);
ivml.setImageResource(did[minute%10]);
ivsh.setImageResource(did[(int)(second/10)]);
ivsl.setImageResource(did[second%10]);
break;
}
super.handleMessage(msg);
}
};
TimerTask task = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
protected void onDestroy()
{
i f (timer != null) {
timer.cancel();
timer = null;
}
s uper.onDestroy();
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(https://www.wendangku.net/doc/9814276597.html,yout.main);
ivhh = (ImageView)findViewById(R.id.iHourHigh);
ivhl = (ImageView)findViewById(R.id.iHourLow);
ivmh = (ImageView)findViewById(R.id.iMinuteHigh);
ivml = (ImageView)findViewById(R.id.iMinuteLow);
ivsh = (ImageView)findViewById(R.id.iSecondHigh);
ivsl = (ImageView)findViewById(R.id.iSecondLow);
c=Calendar.getInstance();
amorpm = c.get(Calendar.AM_PM);
hour = c.get(Calendar.HOUR);
if(amorpm==Calendar.PM)
hour+=12;
minute = c.get(Calendar.MINUTE);
second = c.get(Calendar.SECOND);
ivhh.setImageResource(did[(int)(hour/10)]);
ivhl.setImageResource(did[hour%10]);
ivmh.setImageResource(did[(int)(minute/10)]);
ivml.setImageResource(did[minute%10]);
ivsh.setImageResource(did[(int)(second/10)]);
ivsl.setImageResource(did[second%10]);
timer.schedule(task,1000,1000);
btnExit = (Button)findViewById(R.id.btnExit);
btnExit.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v)
{
LittlePersonClock.this.onDestroy();
}
});
}
}
【测试效果】
编译后打开模拟器,在模拟器上测试效果还行,以下是截图(只是无法看动态的现实):
【写在后面】
限于水平和经验,这个实例肯定还有很多不完善的地方,况且我这个人一向懒于动笔,疏于
总结,本文写得也只能点到为止---要是看不懂,实在不是你的错!