Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android小人時鐘的開發實例分享

Android小人時鐘的開發實例分享

編輯:Android開發實例

       本文乃是一位Android開發愛好者為大家奉獻的一個小人時鐘的Android開發實例,作者還簡單分享了自己的一些經歷和想法,和Android開發學習者門共勉。以下是原文:

       【寫在前面】

       我開始關注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文件夾下面。

小人時鐘的11張圖片

       然後在main.xml布局文件中采用相對布局(RelativeLayout)方式,增加8個ImageView和一個Button,內容如下:

       //以下是main.xml的內容

XML/HTML代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="horizontal"  
  6.     android:background="#FFFFFFFF" >  
  7.   
  8. <ImageView  
  9.     android:id="@+id/iHourHigh"  
  10.     android:layout_width="wrap_content"  
  11.     android:layout_height="wrap_content"  
  12.     android:layout_alignBottom="@+id/iHourLow"  
  13.     android:layout_marginTop="100dip"  
  14.     android:layout_marginLeft="10dip"  
  15.     android:src="@drawable/n0" >  
  16.   
  17. </ImageView>  
  18.   
  19. <ImageView  
  20.     android:id="@+id/iHourLow"  
  21.     android:layout_width="wrap_content"  
  22.     android:layout_height="wrap_content"  
  23.     android:layout_alignBottom="@+id/tColonHM"  
  24.     android:layout_marginLeft="1dip"  
  25.     android:layout_marginTop="100dip"  
  26.     android:layout_toRightOf="@id/iHourHigh"  
  27.     android:src="@drawable/n1" >  
  28.   
  29. </ImageView>    
  30.   
  31. <ImageView    
  32.     android:id="@+id/tColonHM"  
  33.     android:layout_marginTop="100dip"  
  34.     android:src="@drawable/colon"  
  35.     android:layout_width="wrap_content"  
  36.     android:layout_height="wrap_content"  
  37.     android:layout_toRightOf="@id/iHourLow"  
  38.     android:layout_marginLeft="1dip"/>    
  39.   
  40. <ImageView  
  41.     android:id="@+id/iMinuteHigh"  
  42.     android:layout_width="wrap_content"  
  43.     android:layout_height="wrap_content"  
  44.     android:layout_above="@+id/btnReturn"  
  45.     android:layout_marginLeft="1dip"  
  46.     android:layout_marginTop="100dip"  
  47.     android:layout_toRightOf="@id/tColonHM"  
  48.     android:src="@drawable/n2" >  
  49.   
  50. </ImageView>  
  51. <ImageView    
  52.     android:id="@+id/iMinuteLow"  
  53.     android:src="@drawable/n3"  
  54.     android:layout_marginTop="100dip"  
  55.     android:layout_width="wrap_content"  
  56.     android:layout_height="wrap_content"  
  57.     android:layout_toRightOf="@id/iMinuteHigh"  
  58.     android:layout_marginLeft="1dip">  
  59. </ImageView>       
  60.   
  61. <ImageView    
  62.     android:id="@+id/tColonMS"  
  63.     android:layout_marginTop="100dip"  
  64.     android:src="@drawable/colon"  
  65.     android:layout_width="wrap_content"  
  66.     android:layout_height="wrap_content"  
  67.     android:layout_toRightOf="@id/iMinuteLow"  
  68.     android:layout_marginLeft="1dip"/>  
  69.   
  70. <ImageView    
  71.     android:id="@+id/iSecondHigh"  
  72.     android:src="@drawable/n5"  
  73.     android:layout_marginTop="100dip"  
  74.     android:layout_width="wrap_content"  
  75.     android:layout_height="wrap_content"  
  76.     android:layout_toRightOf="@id/tColonMS"  
  77.     android:layout_marginLeft="1dip">  
  78.        
  79. </ImageView>  
  80.   
  81. <ImageView    
  82.     android:id="@+id/iSecondLow"  
  83.     android:src="@drawable/n6"  
  84.     android:layout_marginTop="100dip"  
  85.     android:layout_width="wrap_content"  
  86.     android:layout_height="wrap_content"  
  87.     android:layout_toRightOf="@id/iSecondHigh"  
  88.     android:layout_marginLeft="1dip">  
  89. </ImageView>       
  90.   
  91. <Button    
  92.     android:id="@+id/btnExit"  
  93.     android:layout_width="wrap_content"  
  94.     android:layout_height="wrap_content"  
  95.     android:layout_below="@id/tColonMS"  
  96.     android:text="退出"  
  97.     android:layout_marginTop="50dip"  
  98.     android:layout_marginLeft="100dip"  
  99.     android:textSize="20dp"/>  
  100.   
  101. </RelativeLayout>  

       然後在代碼LittlePersonClock.java中具體實現小人時鐘。

       //以下是源代碼

Java代碼
  1. package com.littlepersonclock.kernel;   
  2.   
  3. import java.util.Calendar;   
  4. import java.util.Timer;   
  5. import java.util.TimerTask;   
  6. import android.app.Activity;   
  7. import android.os.Bundle;   
  8. import android.os.Handler;   
  9. import android.os.Message;   
  10. import android.view.View;   
  11. import android.widget.Button;   
  12. import android.widget.ImageView;   
  13.   
  14. public class LittlePersonClock extends Activity {   
  15.   
  16.     private ImageView ivhh=null,ivhl=null;   
  17.     private ImageView ivmh=null,ivml=null;   
  18.     private ImageView ivsh=null,ivsl=null;   
  19.     private Button btnExit=null;   
  20.     private Timer timer=new Timer();   
  21.     int i=0,hour,minute,second;   
  22.     Calendar c=null;   
  23.     int amorpm=0;   
  24.     final int did[]={R.drawable.n0,R.drawable.n1,R.drawable.n2,R.drawable.n3,R.drawable.n4,   
  25.                      R.drawable.n5,R.drawable.n6,R.drawable.n7,R.drawable.n8,R.drawable.n9};      
  26. //實際上的用法應該通過配合Handler來實現timer功能,這跟Android的線程安全有關!   
  27.     Handler handler = new Handler(){      
  28.         public void handleMessage(Message msg) {      
  29.             switch (msg.what) {          
  30.             case 1:          
  31.                 c=Calendar.getInstance();   
  32.                 amorpm = c.get(Calendar.AM_PM);   
  33.                 hour   = c.get(Calendar.HOUR);   
  34.                 if(amorpm==Calendar.PM)   
  35.                     hour+=12;   
  36.                 minute = c.get(Calendar.MINUTE);   
  37.                 second = c.get(Calendar.SECOND);   
  38.                    
  39.     ivhh.setImageResource(did[(int)(hour/10)]); ivhl.setImageResource(did[hour%10]);   
  40.     ivmh.setImageResource(did[(int)(minute/10)]);   
  41.     ivml.setImageResource(did[minute%10]);   
  42.     ivsh.setImageResource(did[(int)(second/10)]);   
  43.     ivsl.setImageResource(did[second%10]);      
  44.                 break;          
  45.             }          
  46.             super.handleMessage(msg);      
  47.         }      
  48.     };   
  49.        
  50.     TimerTask task = new TimerTask() {   
  51.             @Override              
  52.             public void run() {   
  53.                 Message message = new Message();          
  54.                 message.what = 1;          
  55.                 handler.sendMessage(message);     
  56.             }   
  57.             };   
  58.     protected void onDestroy()   
  59.     {   
  60.         if (timer != null) {   
  61.             timer.cancel();   
  62.             timer = null;   
  63.             }   
  64.         super.onDestroy();   
  65.     }          
  66.     public void onCreate(Bundle savedInstanceState) {   
  67.         super.onCreate(savedInstanceState);   
  68.         setContentView(R.layout.main);          
  69.   
  70.         ivhh = (ImageView)findViewById(R.id.iHourHigh);   
  71.         ivhl = (ImageView)findViewById(R.id.iHourLow);   
  72.         ivmh = (ImageView)findViewById(R.id.iMinuteHigh);   
  73.         ivml = (ImageView)findViewById(R.id.iMinuteLow);   
  74.         ivsh = (ImageView)findViewById(R.id.iSecondHigh);   
  75.         ivsl = (ImageView)findViewById(R.id.iSecondLow);   
  76.         c=Calendar.getInstance();   
  77.         amorpm = c.get(Calendar.AM_PM);   
  78.         hour   = c.get(Calendar.HOUR);   
  79.         if(amorpm==Calendar.PM)   
  80.             hour+=12;   
  81.         minute = c.get(Calendar.MINUTE);   
  82.         second = c.get(Calendar.SECOND);   
  83.            
  84.         ivhh.setImageResource(did[(int)(hour/10)]);   
  85.         ivhl.setImageResource(did[hour%10]);   
  86.         ivmh.setImageResource(did[(int)(minute/10)]);   
  87.         ivml.setImageResource(did[minute%10]);   
  88.         ivsh.setImageResource(did[(int)(second/10)]);   
  89.         ivsl.setImageResource(did[second%10]);   
  90.   
  91.         timer.schedule(task,1000,1000);   
  92.         btnExit = (Button)findViewById(R.id.btnExit);   
  93.         btnExit.setOnClickListener(new Button.OnClickListener(){   
  94.             public void onClick(View v)   
  95.             {   
  96.                 LittlePersonClock.this.onDestroy();   
  97.             }   
  98.         });   
  99.     }   
  100. }  

       【測試效果】

       編譯後打開模擬器,在模擬器上測試效果還行,以下是截圖(只是無法看動態的現實):

Android小人時鐘

       【寫在後面】

       限於水平和經驗,這個實例肯定還有很多不完善的地方,況且我這個人一向懶於動筆,疏於總結,本文寫得也只能點到為止---要是看不懂,實在不是你的錯!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved