±ÏÒµÂÛÎÄ - »ùÓÚ°²×¿ÏµÍ³µÄƴͼÓÎÏ·Éè¼Æ - wordÎĵµ ÏÂÔØ±¾ÎÄ

±Ï Òµ ÂÛ ÎÄ

Éè¼Æ(ÂÛÎÄ)ÌâÄ¿£º »ùÓÚAndroid ÒæÖÇÆ´Í¼ÓÎÏ·Éè¼Æ

ѧÉúÐÕÃû£º ³Â ±ó Ö¸µ¼½Ìʦ£º ÀîÀò ½²Ê¦ ¶þ¼¶Ñ§Ôº£º ÐÅÏ¢¼¼ÊõѧԺ ר Òµ£º ¼ÆËã»ú¿ÆÑ§Óë¼¼Êõ °à ¼¶£º08¼ÆËã»ú¿ÆÑ§Óë¼¼Êõ(2) ѧ ºÅ£º 0805110219 Ìá½»ÈÕÆÚ£º 2012Äê 04Ô 27ÈÕ ´ð±çÈÕÆÚ£º 2012Äê 05Ô 12ÈÕ

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ Ä¿Â¼

Ŀ ¼

Õª Òª .......................................................... III Abstract ........................................................ IV 1 Ð÷ ÂÛ .......................................................... 1 1.1 ¿ÎÌ⿪·¢µÄ±³¾° ............................................ 1 1.2 ¿ÎÌâÒâÒå .................................................. 1 2 Android¼Ü¹¹Ó뿪·¢Æ½Ì¨´î½¨ ..................................... 2 2.1 AndroidµÄϵͳ¼Ü¹¹ ........................................ 2 2.2 WindowÏÂAndroid¿ª·¢»·¾³µÄ´î½¨ ........................... 4 3 Á÷³Ì½éÉÜÓë¸ÅÒªÉè¼Æ ............................................. 5 3.1 ÓÎÏ·Á÷³Ì½éÉÜ .............................................. 5 3.2 ϵͳ¸ÅÒªÉè¼Æ .............................................. 6

3.2.1 ½çÃæ²¼¾ÖÄ£¿é ........................................ 6 3.2.2 ÄѶÈÑ¡ÔñÄ£¿é ........................................ 6 3.2.3 ͼƬѡÔñÄ£¿é ........................................ 7 3.2.4 ²½ÊýºÍʱ¼äÄ£¿é ...................................... 7 3.2.5 ÓÎϷʵÏÖÄ£¿é ........................................ 7

4 ϵͳÏêϸÉè¼ÆÓëʵÏÖ ............................................. 8 4.1 ½çÃæ²¼¾ÖʵÏÖ .............................................. 8

4.1.1 Ñ¡Ôñ½çÃæ²¼¾Ö ........................................ 8 4.1.2 ÓÎÏ·½çÃæ²¼¾Ö ........................................ 9 4.2 ÓÎÏ·¹¦ÄÜʵÏÖ ............................................. 11

4.2.1 ÄѶÈÑ¡Ôñ ........................................... 11 4.2.2 ͼƬѡÔñ ........................................... 12 4.2.3 ²½ÊýºÍʱ¼äÉèÖà ..................................... 13 4.2.4 ƴͼµÄʵÏÖ ......................................... 14

5 ϵͳ²âÊÔ ...................................................... 17 5.1 Android·ÂÕæÆ÷½éÉÜ ...................................... 17

I

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ Ä¿Â¼

5.2 ¹¦ÄÜÄ£¿é²âÊÔ ............................................ 17 5.3 ³öÏֵĴíÎó¼°½â¾ö·½°¸ .................................... 20 6 ×ܽáÓëÕ¹Íû .................................................... 21 ²Î¿¼ÎÄÏ× ........................................................ 22 ¸½ ¼ ........................................................... 23 Ö л ........................................................... 33

II

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ ÕªÒª

»ùÓÚAndroidÒæÖÇÆ´Í¼ÓÎÏ·Éè¼Æ

Õª Òª

Ëæ×ÅÒÆ¶¯É豸µÄÈÕÒæÆÕ¼°£¬Ê¹ÓÃAndroid¼¼Êõ¿ª·¢ÊÖ»úÈí¼þÊܵ½Ô½À´Ô½¶àÈ˵ÄÇàíù¡£Ôڴ˱³¾°Ï£¬±¾¿ÎÌ⿪·¢ÁËÒ»¿îAndroidƽ̨ϵÄÊÖ»úÓÎÏ·¡ª¡ªÒæÖÇÆ´Í¼¡£

±¾ÎÄÊ×ÏȶÔAndroidµÄÑо¿±³¾°,ϵͳ¼Ü¹¹ÒÔ¼°¿ª·¢»·¾³½øÐнéÉÜ£¬È»ºó¾ÍÍæ¼Ò¶ÔÓÎÏ·µÄÐèÇó½øÐÐÒ»¶¨µÄ·ÖÎö£¬×îºóÔËÓÃAndroid¼¼ÊõʵÏÖÆ´Í¼ÓÎÏ·µÄ¿ª·¢£¬²¢ºÏÀí²¼¾ÖÓÎÏ·½çÃæ£¬Ê¹ÓÎÏ·½çÃæ¸ü¼ÓÃÀ¹ÛºÍÈËÐÔ»¯£¬ÊµÏÖÁËÓÎÏ·µÄ»ù±¾¹¦ÄÜ£¬×îÖÕ¿ÉÒÔÈÃÍæ¼ÒÏíÊÜÆ´Í¼ÓÎÏ·µÄÀÖȤ¡£

¹Ø¼ü´Ê£ºAndroid£»Æ´Í¼ÓÎÏ·£»Activity£»¼Ü¹¹

III

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ Abstract

The development and features of Android

Abstract

Key words: Android£»Jigsaw puzzle game£»Activity£»sturcture

IV

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ1Õ Ð÷ÂÛ

1 Ð÷ ÂÛ

1.1 ¿ÎÌ⿪·¢µÄ±³¾°

Ëæ×ÅǶÈëʽ¼¼ÊõµÄ·¢Õ¹£¬ÊÖ³ÖÖÕ¶ËÉ豸ҲѸËÙ·¢Õ¹ÆðÀ´£¬Ä¿Ç°£¬È«ÇòÊÖ»úÓû§ÊýÒѳ¬¹ýÁËPC»úÓû§Êý£¬ÆäÖÐÖÇÄÜÊÖ»úµÄ±ÈÀýÔ½À´Ô½¸ß¡£ÖÇÄÜÊÖ»úÊÇÖ¸ÏñµçÄÔÒ»Ñù¿ÉÒÔͨ¹ýÏÂÔØ¡¢°²×°Èí¼þÀ´ÍØÕ¹»ù±¾¹¦ÄܵÄÊÖ»ú£¬Ò»°ã¾ßÓÐÖÇÄÜÊÖ»ú²Ù×÷ϵͳ¡£Ïà½ÏÓÚ·ÇÖÇÄÜÊÖ»ú£¬Ëü¹¦ÄܸüÇ¿£¬´¦ÀíËٶȸü¿ì¡£»ùÓÚLinuxµÄAndroidÊÖ»ú²Ù×÷ϵͳ£¬ÓÉÓÚ¾ßÓпªÔ´¡¢Ãâ·ÑµÄÌØÐÔ£¬Ñ¸Ëٵõ½¹ã´ó°®ºÃÕß¼°³§É̵ÄÖ§³Ö¡£Ä¿Ç°£¬Òƶ¯Ó¦ÓÃÈí¼þÖеÄÊÖ»úÓÎÏ·¿ª·¢ÊÇÒ»Ïî·Ç³£ÈÈÃŵļ¼Êõ¡£

Androidϵͳ¶ÔµÚÈý·½Èí¼þÊÇ¿ª·ÅµÄ£¬Õâ´Ù½øÁ˵ÚÈý·½Èí¼þµÄ·¢Õ¹¡£AndroidϵͳÒÔLinux 2.6ΪºËÐÄ£¬Æä°²È«»úÖÆ±È½ÏÍêÉÆ£¬ÔöÇ¿ÁËÊÖ»úʹÓõݲȫÐÔ¡£Androidƽ̨ÒѾ­ÐγÉÓÉ Googleǣͷ£¬OHA×éÖ¯²ÎÓ룬ϵͳ֧³ÖÉ̺ͷþÎñ¹©Ó¦ÉÌÍêÉÆ´îÅäµÄÔË×÷»úÖÆ£¬ÎªAndroidƽ̨µÄ¿ìËÙ·¢Õ¹ÌṩÁ˼áʵµÄ»ù´¡¡£

ÓÉÓÚAndroid¹¹½¨ÔÚ¿ªÔ´´úÂëµÄ¿ò¼ÜÖ®ÉÏ£¬²¢ÇÒÌṩÁËÇ¿´óµÄSDK¿âºÍ¿ª·ÅµÄÀíÄËùÒÔËüΪ¹ã´óµÄûÓÐÈκÎÒÆ¶¯Ó¦ÓóÌÐò¿ª·¢¾­ÑéµÄÐÂÊÖ¿ª±ÙÁËÒ»Ìõ¿ª·¢ÍêÃÀÒÆ¶¯Ó¦ÓóÌÐòµÄ¿µ×¯´óµÀ¡£¶ø¸»Óо­ÑéµÄÒÆ¶¯¿ª·¢ÈËÔ±ÏÖÔÚÒ²¿ÉÒÔ·½±ãµØÀ©Õ¹µ½Androidƽ̨ÉÏÀ´£¬ÀûÓÃËü¶ÀÌØµÄ¹¦ÄÜÀ´¸Ä½øÏÖÓвúÆ·»òÕß¿ª·¢ÆäËûÐÂÓ±²úÆ·¡£

1.2 ¿ÎÌâÒâÒå

AndroidÈí¼þÔÚÒ»Á½ÄêµÄʱ¼äÄÚÒѾ­Ñ¸ËÙ·¢Õ¹£¬ÔÚ¸÷ÀàÐÍÓ¦ÓÃϵͳÖж¼ÓÐÁîÓû§ÂúÒâµÄ³É¹û£¬±¾¿ÎÌâÑо¿µÄ¾ÍÊÇ»ùÓڴ˱³¾°ÏÂAndroidÊÖ»úµÄÒ»¿îÒæÖÇÆ´Í¼ÓÎÏ·¡£Í¨¹ý¸ÃÓÎÏ·µÄÉè¼Æ£¬½«×Ô¼ºÑ§µ½µÄJava£¬Android·½ÃæµÄÀíÂÛ֪ʶӦÓÃÓÚʵ¼ù£¬Ìá¸ß×Ô¼ºµÄ¶¯ÊÖÄÜÁ¦¡£ÔÚÉè¼ÆµÄ¹ý³ÌÖУ¬²»¶ÏµÄÐÞ²¹ÖªÊ¶·½ÃæµÄ©¶´£¬¼ÓÉî×Ô¼º¶Ô³ÌÐòÉè¼ÆµÄÀí½â£¬Îª½«À´´ÓÊÂÈí¼þ¿ª·¢ÊÂÒµ´òÏ»ù´¡¡£

1

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ2Õ Android¼Ü¹¹Ó뿪·¢Æ½Ì¨´î½¨ 2 Android¼Ü¹¹Ó뿪·¢Æ½Ì¨´î½¨

2.1 AndroidµÄϵͳ¼Ü¹¹

AndroidµÄϵͳ¼Ü¹¹ºÍÆä²Ù×÷ϵͳһÑù£¬²ÉÓÃÁË·Ö²ãµÄ¼Ü¹¹¡£´Óͼ2.1ÖпÉÒÔ¿´³ö£¬Android·ÖΪËĸö²ã£¬´Ó¸ß²ãµ½µÍ²ã·Ö±ðÊÇÓ¦ÓóÌÐò²ã¡¢Ó¦ÓóÌÐò¿ò¼Ü²ã¡¢ÏµÍ³ÔËÐпâ²ãºÍLinuxºËÐIJ㡣

ͼ2.1 Androidϵͳ¼Ü¹¹Í¼

(1) Ó¦ÓóÌÐò

Android»áͬһϵÁкËÐÄÓ¦ÓóÌÐò°üÒ»Æð·¢²¼£¬¸ÃÓ¦ÓóÌÐò°ü°üÀ¨Email¿Í»§¶Ë£¬SMS¶ÌÏûÏ¢³ÌÐò£¬ÈÕÀú£¬µØÍ¼£¬ä¯ÀÀÆ÷£¬ÁªÏµÈ˹ÜÀí³ÌÐòµÈ¡£ËùÓеÄÓ¦ÓóÌÐò¶¼ÊÇʹÓÃJAVAÓïÑÔ±àдµÄ¡£

(2) Ó¦ÓóÌÐò¿ò¼Ü

¿ª·¢ÈËÔ±Ò²¿ÉÒÔÍêÈ«·ÃÎʺËÐÄÓ¦ÓóÌÐòËùʹÓõÄAPI¿ò¼Ü¡£¸ÃÓ¦ÓóÌÐòµÄ¼Ü¹¹Éè¼Æ¼ò»¯ÁË×é¼þµÄÖØÓã»ÈκÎÒ»¸öÓ¦ÓóÌÐò¶¼¿ÉÒÔ·¢²¼ËüµÄ¹¦Äܿ鲢ÇÒÈÎºÎÆäËüµÄÓ¦ÓóÌÐò¶¼¿ÉÒÔʹÓÃÆäËù·¢²¼µÄ¹¦Äܿ飨²»¹ýµÃ×ñÑ­¿ò¼ÜµÄ°²È«ÐÔÏÞÖÆ£©¡£Í¬Ñù£¬¸ÃÓ¦ÓóÌÐòÖØÓûúÖÆÒ²Ê¹Óû§¿ÉÒÔ·½±ãµÄÌæ»»³ÌÐò×é¼þ¡£

2

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ2Õ Android¼Ü¹¹Ó뿪·¢Æ½Ì¨´î½¨ Òþ²ØÔÚÿ¸öÓ¦ÓúóÃæµÄÊÇһϵÁеķþÎñºÍϵͳ, ÆäÖаüÀ¨£»

·á¸»¶øÓÖ¿ÉÀ©Õ¹µÄÊÓͼ£¨Views£©£º¿ÉÒÔÓÃÀ´¹¹½¨Ó¦ÓóÌÐò£¬Ëü°üÀ¨ÁÐ±í£¨lists£©£¬Íø¸ñ£¨grids£©£¬Îı¾¿ò£¨text boxes£©£¬°´Å¥£¨buttons£©£¬ÉõÖÁ¿ÉǶÈëµÄwebä¯ÀÀÆ÷¡£

ÄÚÈÝÌṩÆ÷£¨Content Providers£©£ºÊ¹µÃÓ¦ÓóÌÐò¿ÉÒÔ·ÃÎÊÁíÒ»¸öÓ¦ÓóÌÐòµÄÊý¾Ý£¨ÈçÁªÏµÈËÊý¾Ý¿â£©£¬»òÕß¹²ÏíËüÃÇ×Ô¼ºµÄÊý¾Ý¡£

×ÊÔ´¹ÜÀíÆ÷£¨Resource Manager£©£ºÌṩ·Ç´úÂë×ÊÔ´µÄ·ÃÎÊ£¬Èç±¾µØ×Ö·û´®£¬Í¼ÐΣ¬ºÍ²¼¾ÖÎļþ£¨layout files£©¡£

֪ͨ¹ÜÀíÆ÷£¨Notification Manager£©£ºÊ¹µÃÓ¦ÓóÌÐò¿ÉÒÔÔÚ״̬À¸ÖÐÏÔʾ×Ô¶¨ÒåµÄÌáʾÐÅÏ¢¡£

»î¶¯¹ÜÀíÆ÷£¨Activity Manager£©£ºÓÃÀ´¹ÜÀíÓ¦ÓóÌÐòÉúÃüÖÜÆÚ²¢Ìṩ³£Óõĵ¼º½»ØÍ˹¦ÄÜ¡£

(3) ϵͳÔËÐпâ 1) ³ÌÐò¿â

Android°üº¬Ò»Ð©C/C++¿â£¬ÕâЩ¿âÄܱ»AndroidϵͳÖв»Í¬µÄ×é¼þʹÓá£ËüÃÇͨ¹ý AndroidÓ¦ÓóÌÐò¿ò¼ÜΪ¿ª·¢ÕßÌṩ·þÎñ¡£ÒÔÏÂÊÇһЩºËÐĿ⣺

ϵͳC¿â£ºÒ»¸ö´ÓBSD¼Ì³ÐÀ´µÄ±ê×¼Cϵͳº¯Êý¿â£¨libc£©£¬ ËüÊÇרÃÅΪ»ùÓÚembedded linuxµÄÉ豸¶¨ÖƵġ£

ýÌå¿â£º»ùÓÚPacketVideo OpenCORE£¬¸Ã¿âÖ§³Ö¶àÖÖ³£ÓõÄÒôƵ¡¢ÊÓÆµ¸ñʽ»Ø·ÅºÍÂ¼ÖÆ£¬Í¬Ê±Ö§³Ö¾²Ì¬Í¼ÏñÎļþ¡£±àÂë¸ñʽ°üÀ¨MPEG4£¬H.264£¬MP3£¬AAC£¬AMR£¬JPG£¬PNG¡£

Surface Manager£º¶ÔÏÔʾ×ÓϵͳµÄ¹ÜÀí£¬²¢ÇÒΪ¶à¸öÓ¦ÓóÌÐòÌṩÁË2DºÍ3Dͼ²ãµÄÎÞ·ìÈںϡ£

LibWebCore£ºÒ»¸ö×îÐÂwebä¯ÀÀÆ÷ÒýÇæÓã¬Ö§³ÖAndroidä¯ÀÀÆ÷ºÍÒ»¸ö¿ÉǶÈëµÄwebÊÓͼ¡£

SGL£ºµ×²ãµÄ2DͼÐÎÒýÇæ¡£

3D libraries£º»ùÓÚOpenGL ES 1.0 APIsʵÏÖ£»¸Ã¿â¿ÉÒÔʹÓÃÓ²¼þ3D¼ÓËÙ£¨Èç¹û¿ÉÓã©»òÕßʹÓø߶ÈÓÅ»¯µÄ3DÈí¼ÓËÙ¡£

FreeType£ºÎ»Í¼£¨bitmap£©ºÍʸÁ¿£¨vector£©×ÖÌåÏÔʾ¡£

SQLite£ºÒ»¸ö¶ÔÓÚËùÓÐÓ¦ÓóÌÐò¿ÉÓ㬹¦ÄÜÇ¿¾¢µÄÇáÐ͹ØÏµÐÍÊý¾Ý¿âÒýÇæ¡£ 2) Android ÔËÐпâ

Android°üÀ¨ÁËÒ»¸öºËÐĿ⣬¸ÃºËÐÄ¿âÌṩÁËJAVA±à³ÌÓïÑÔºËÐÄ¿âµÄ´ó¶àÊý¹¦ÄÜ¡£ ÿһ¸öAndroidÓ¦ÓóÌÐò¶¼ÔÚËü×Ô¼ºµÄ½ø³ÌÖÐÔËÐУ¬¶¼ÓµÓÐÒ»¸ö¶ÀÁ¢µÄDalvikÐéÄâ »úʵÀý¡£Dalvik±»Éè¼Æ³ÉÒ»¸öÉ豸¿ÉÒÔͬʱ¸ßЧµØÔËÐжà¸öÐéÄâϵͳ¡£DalvikÐéÄâ»úÖ´ÐУ¨.dex£©µÄDalvik¿ÉÖ´ÐÐÎļþ£¬¸Ã¸ñʽÎļþÕë¶ÔСÄÚ´æÊ¹ÓÃ×öÁËÓÅ»¯¡£Í¬Ê±ÐéÄâ»úÊÇ»ùÓڼĴæÆ÷µÄ£¬ËùÓеÄÀà¶¼¾­ÓÉJAVA±àÒëÆ÷±àÒ룬Ȼºóͨ¹ýSDKµÄ\dx\¹¤¾ßת»¯³É.dex¸ñʽ

3

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ2Õ Android¼Ü¹¹Ó뿪·¢Æ½Ì¨´î½¨ ÓÉÐéÄâ»úÖ´ÐС£

DalvikÐéÄâ»úÒÀÀµÓÚLinuxÄں˵ÄһЩ¹¦ÄÜ£¬±ÈÈçÏ̻߳úÖÆºÍµ×²ãÄÚ´æ¹ÜÀí»úÖÆ¡£ (4) LinuxÄÚºË

AndroidµÄºËÐÄϵͳ·þÎñÒÀÀµÓÚLinux 2.6Äںˣ¬È簲ȫÐÔ£¬ÄÚ´æ¹ÜÀí£¬½ø³Ì¹ÜÀí£¬ÍøÂçЭÒéÕ»ºÍÇý¶¯Ä£ÐÍ¡£LinuxÄÚºËҲͬʱ×÷ΪӲ¼þºÍÈí¼þÕ»Ö®¼äµÄ³éÏó²ã¡£

2.2 WindowÏÂAndroid¿ª·¢»·¾³µÄ´î½¨

ΪÁËÔÚPCÖ÷»úÉϵõ½AndroidµÄ¿ª·¢»·¾³£¬ÎÒÃÇÑ¡ÔñÔÚWindows²Ù×÷ϵͳÖнøÐжÔAndroid¿ª·¢»·¾³µÄ´î½¨£¬¾ßÌå²½ÖèÈçÏ£º

£¨1£©JDK°²×°

Ê×ÏÈÏÂÔØJDK£¬°´ÕÕÌáʾ°²×°³É¹¦ºó£¬×îÖØÒªµÄÊǽøÐл·¾³±äÁ¿µÄÅäÖ㬲½ÖèÈçÏ£ºÎҵĵçÄÔ£­£¾ÊôÐÔ£­£¾¸ß¼¶£­£¾»·¾³±äÁ¿£­£¾ÏµÍ³±äÁ¿ÖÐÌí¼ÓÒÔÏ»·¾³±äÁ¿£º

Java_HOMEֵΪ£ºC£º\\Program Files\\Java\\jdk1.6.0£ß20£¨°²×°JDKµÄĿ¼£©

CLASSPATHֵΪ£º£®£»%Java_HOME%lib\\tools£®jar£»%Java_HOME%\\lib\\dt£® jar£»%Java _HOME%\\bin£»

PathÖµ£ºÌí¼ÓC£º\\Program Files\\Java\\jdk1.6.0£ß20\\bin£»

£¨2£©Eclipse°²×°¿ÉÏÂÔØÒ»¸öÂÌÉ«°æµÄEclipse£¬ÎÞÐè°²×°£¬ºÍ°²×°°æÒ»Ñù¶¼ÄÜΪAndroid¿ª·¢Ìṩ¹¦ÄÜ¡£

£¨3£©Android SDK°²×°ÔÚAndroid DevelopersÏÂÔØAndroid£­sdk£ßr07£­windows£®zip£¬ÏÂÔØÍê³Éºó½âѹµ½ÈÎÒâ·¾¶¡£

ÔËÐÐSDK Manager.exe£¬³öÏÖÈçͼÒÔϽçÃæ£¬µã»÷Available Package¡£Ñ¡ÔñÏ£Íû°²×°µÄSDK¼°ÆäÎĵµ»òÕ߯äËü°ü£¬µã»÷Installation Selected¡¢Accept All¡¢Install Accepted£¬¿ªÊ¼ÏÂÔØ°²×°ËùÑ¡°ü¡£

ÏÂÔØÍê³Éºó³öÏÖÈçÏÂͼµÄËùÓÐAndroid£­sdk£ßr07£­windowsÎļþ¼ÐÄÚÈÝ£» £¨4£©ADT°²×°

ADTʵ¼ÊÉÏÊÇÒ»¸ö¹¤¾ß£¬Ëü¿ÉÒÔÁ¬½ÓsdkºÍEclipse£¬°ïÖúEclipseÕÒµ½sdk´ò¿ªEclipse½çÃæ£¬½øÈë½øÈë²Ëµ¥Öеġ°Help¡±£­£¾ ¡°Install New Software¡±£¬µã»÷Add°´Å¥µ¯³ö¶Ô»°¿òÒªÇóÊäÈëNameºÍLocation£¬Íê³ÉÖ®ºó£¬Ñ¡ÔñWindow £¾Preferences£»ÔÚ×ó±ßµÄÃæ°åÑ¡ÔñAndroid£¬È»ºóÔÚÓÒ²àµã»÷Browse£»²¢Ñ¡ÖÐSDK·¾¶£¬±¾»úΪ£»D£º£ÜYJSH£ÜAndroid£ÜAndroid£­sdk£ßr07£­windows£»µã»÷Apply¡¢OK¡£ÅäÖÃÍê³É¡£

£¨5£©´´½¨AVD

ΪʹAndroidÓ¦ÓóÌÐò¿ÉÒÔÔÚÄ£ÄâÆ÷ÉÏÔËÐУ¬±ØÐë´´½¨AVD£¬²½ÖèÈçÏ£º

ÔÚEclipseÖУ¬Ñ¡ÔñWindows £¾ Android SDK and AVD Manager£¬µã»÷×ó²àÃæ°åµÄVirtual Devices£¬ÔÙÓÒ²àµã»÷New£¬ÌîÈëName£¬Ñ¡ÔñTargetµÄAPI£¬SD Card´óСÈÎÒ⣬SkinËæ±ãÑ¡£¬HardwareĿǰ±£³ÖĬÈÏÖµ£¬µã»÷CreateAVD¼´¿ÉÍê³É´´½¨AVD¡£

4

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ3Õ Á÷³Ì½éÉÜÓë¸ÅÒªÉè¼Æ

3 Á÷³Ì½éÉÜÓë¸ÅÒªÉè¼Æ

3.1 ÓÎÏ·Á÷³Ì½éÉÜ

¸ù¾ÝƴͼÓÎÏ·µÄÓÎÏ·¹æÔò£¬±¾Éè¼ÆÄâ³öÓÎÏ·µÄ´óÖÂÁ÷³ÌÈçͼ3.1Ëùʾ£º

µã»÷¡°ÒæÖÇÆ´Í¼¡±½øÈëÑ¡Ôñ½çÃæÒѽøÈëµã»÷ÏÂÀ­ÁÐ±í£¬Íê³ÉÄѶÈÑ¡Ôñµã»÷ͼƬ¿òÖеÄÒ»ÕÅͼƬµã»÷¡°È·¶¨¡±½øÈëÓÎÏ·½çÃæÒѽøÈëµã»÷play°´Å¥£¬Ê±¼ä¿ªÊ¼¼ÆÊ±Î´½øÈëÑ¡Ôñ½çÃæµã»÷ͼ¿é²¢Í϶¯Î´½øÈëÓÎÏ·½çÃæÃ¿ÍÏÒ»´Î£¬²½Êý¼Ó1ͼƬƴ³ÉÔ­Ñù£¬ÓÎÏ·½áÊøÓÎϷʧ°Ü

ͼ3.1 ƴͼÓÎÏ·Á÷³Ìͼ

5

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ3Õ Á÷³Ì½éÉÜÓë¸ÅÒªÉè¼Æ

3.2 ϵͳ¸ÅÒªÉè¼Æ

±¾Éè¼Æ²Î¿¼ÁËÆ´Í¼ÓÎÏ·Á÷³Ìͼ£¨Í¼3.1£©°´ÕÕ×Ô¶¥ÏòϵÄÉè¼Æ·½Ê½½«Æ´Í¼ÓÎÏ··ÖΪÒÔÏÂÄ£¿é½øÐÐÉè¼Æ£¬Èçͼ3.2Ëùʾ£º

ÒæÖÇÆ´Í¼ÓÎÏ·½çÃæ²¼¾ÖÄ£¿éÓÎÏ·¹¦ÄÜÄ£¿éÄѶÈÑ¡ÔñÄ£¿éͼƬѡÔñÄ£¿é²½Êý£¬Ê±¼äÉèÖÃÄ£¿éÓÎϷʵÏÖÄ£¿é ͼ3.2 ƴͼÓÎÏ·Ä£¿é

3.2.1 ½çÃæ²¼¾ÖÄ£¿é

ÓÉÓÚ±¾¿ÎÌâµÄÌâ²ÄÊÇÒ»¿îÓÎÏ·£¬¶ÔÓÚÓÎÏ·µÄ½çÃæÒÔ¼°Ò»Ð©»ù±¾¿Ø¼þÓбØÒª½éÉÜһϡ£±¾ÏµÍ³Ò»¹²ÓÐÁ½¸ö½çÃæ£ºÒ»¸öÑ¡Ôñ½çÃæ£¬Ò»¸öÓÎÏ·½çÃæ£¬»ù±¾µÄ¿Ø¼þÓÐÎı¾¿ò£¬ÏÂÀ­ÁÐ±í£¬Íø¸ñÊÓͼ£¬°´Å¥£¬Í¼Æ¬ÊÓͼµÈ¡£ÏÂÃæ¼òµ¥½éÉÜÏÂËüÃǵÄ×÷Óãº

Îı¾¿òÖ÷ÒªÊÇÓÃÀ´ÏÔʾһЩÎı¾£¬ÕâЩÎı¾»ù±¾ÊÇÃèÊöÎı¾¿òËùÔÚλÖõŦÄÜ¡£ ÏÂÀ­ÁбíÖ÷ÒªÓÃÔÚÁËÄѶÈÑ¡Ôñ²¿·Ö£¬µ±Íæ¼Òµã»÷ÄѶÈʱ£¬»á³öÏÖÏÂÀ­ÁÐ±í¡£ Íø¸ñÊÓͼÖ÷ÒªÓÃÓÚͼƬѡÔñ²¿·Ö£¬ÀûÓÃÍø¸ñÊÓͼ½«Í¼Æ¬Ò»Ò»Áгö£¬¹©Íæ¼ÒÑ¡ÔñͼƬ½øÐÐÓÎÏ·¡£

°´Å¥ÊÇÁ½¸ö½çÃæµÄÁ´½ÓÊàŦ£¬ÔÚµÚÒ»¸öÑ¡Ôñ½çÃæ°´ÏÂÈ·¶¨°´Å¥£¬»áÌø×ªµ½ÓÎÏ·½çÃæ¡£ÔÚÓÎÏ·½çÃæÒ²ÉèÖÃÁËÒ»¸ö°´Å¥£¬Ö÷ÒªÊǸøÍæ¼ÒÌṩ¡°ÖØÐÂÓÎÏ·¡±µÄ»ú»á¡£

ͼƬÊÓͼֻҪÓÃÀ´ÏÔʾͼƬ£¬ÔÚÓÎÏ·½çÃæÓÃͼƬÊÓͼÏÔʾͼƬ£¬¹©Íæ¼ÒÓÎÏ·¡£

3.2.2 ÄѶÈÑ¡ÔñÄ£¿é

ƴͼÓÎÏ·µÄÄѶÈÔÚÓÚͼƬ±»·Ö¸îºóµÄ¿éÊý£¬ÊýÁ¿Ô½¶à£¬×ÔÈ»ÄѶȾÍÔ½´ó¡£ £¨1£©ÄѶÈ×îСµÄÊǽ«ÆäÉèÖÃΪ3*3

µ±ÄѶÈÉèÖÃΪ3*3ʱ£¬ÏµÍ³½«Í¼Æ¬·Ö¸îΪ3ÐÐ3ÁУ¬Ò²¾ÍÊǽ«Í¼Æ¬·Ö³ÉÁË9¿é¡£ £¨2£©ÄѶÈ×î´óµÄÊǽ«ÆäÉèÖÃΪ4*4

µ±ÄѶÈÉèÖÃΪ4*4ʱ£¬ÏµÍ³½«Í¼Æ¬·Ö¸î³É4ÐÐ4ÁУ¬Ò²¾ÍÊǽ«Í¼Æ¬·Ö³ÉÁË16¿é¡£ £¨3£©ÄѶÈÖеȵÄÉèÖÃÓÐÁ½ÖÖ£º3*4 ºÍ4*3

µ±ÄѶÈÉèÖÃΪ3*4ʱ£¬ÏµÍ³½«Í¼Æ¬·Ö¸î³É3ÐÐ4ÁУ¬¼´·Ö³ÉÁË12¿é¡£

6

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ3Õ Á÷³Ì½éÉÜÓë¸ÅÒªÉè¼Æ

µ±ÄѶÈÉèÖÃΪ4*4ʱ£¬ÏµÍ³½«Í¼Æ¬·Ö¸î³É4ÐÐ3ÁУ¬Í¬Ñù·Ö³ÉÁË12¿é¡£

3.2.3 ͼƬѡÔñÄ£¿é

ͼƬѡÔñ²½ÖèÏ൱¼òµ¥£¬Ö»ÒªÔÚÑ¡Ôñ½çÃæµÄͼƬѡÔñÇøÓò£¬´Ó9ÕÅͼƬÖÐÊó±êµ¥»÷1ÕÅÍæ¼Ò¸ÐÐËȤµÄͼƬ¼´¿É¡£

3.2.4 ²½ÊýºÍʱ¼äÄ£¿é

ƴͼÓÎÏ·¹ý³ÌÖУ¬ÎªÁËÔö¼ÓȤζÐÔ£¬Íæ¼ÒÃ¿ÒÆ¶¯Ò»´Îͼ¿é£¬²½Êý¼ÓÒ»£¬ÖªµÀÓÎÏ·È«²¿Î»ÖÃÕýÈ·£¬ÓÎÏ·½áÊø£¬Í³¼Æ×îºó²½Êý£»´ÓÓÎÏ·¿ªÊ¼£¬Ê±¼äÄ£¿é¿ªÊ¼¼ÆÊ±£¬Ö±µ½ÓÎÏ·½áÊø£¬Ê±¼äÍ£Ö¹£¬²¢ÏÔÊ¾Íæ¼ÒÍê³ÉÓÎÏ·Ëù»¨µÄʱ¼ä¡£

3.2.5 ÓÎϷʵÏÖÄ£¿é

ÔÚÍê³ÉÉÏÊöµÄͼƬѡÔñ£¬ÄѶÈÑ¡Ôñºó¾Í¿ÉÒÔ¿ªÊ¼ÕýʽµÄƴͼÓÎÏ·¡£

Íæ¼ÒÑ¡Ôñ¡°play¡±ºó£¬Í¼Æ¬»á¸ù¾ÝÍæ¼ÒÑ¡ÔñµÄÄѶÈËæ»ú·Ö½âͼƬ¡£ÔÚ±¾Éè¼ÆÖУ¬Ô­Í¼·Ö¸îºóÓÒϽÇÉèÖÃΪ¿Õ°×¿é£¬ÎªÍ¼¿éµÄÒÆ¶¯Ìṩ¿ÉÄÜ¡£Íæ¼ÒÓÃÊó±êµã»÷Óë¿Õ°×¿éÏàÁÚµÄͼ¿é£¬²¢½«Ñ¡ÖеÄͼƬÍù¿Õ°×¿éÍ϶¯£¬ÕâÑù¾ÍÍê³ÉÁ˿հ׿éÓëÑ¡ÖÐͼƬµÄλÖõĻ¥»»¡£ÕâÑù×ÓÑ­»·Íù¸´£¬ÖªµÀÈ«²¿Í¼¿éλÖÃÕýÈ·£¬ÓÎÏ·¾Í½áÊøÁË¡£

7

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

4 ϵͳÏêϸÉè¼ÆÓëʵÏÖ

4.1 ½çÃæ²¼¾ÖʵÏÖ

±¾Éè¼ÆÓÐÁ½¸ö½çÃæ£ºÑ¡Ôñ½çÃæºÍÓÎÏ·½çÃæ¡£½çÃæµÄÉè¼ÆÖ÷ÒªÔËÓÃAndroidµÄ»æÍ¼¼¼Êõ£¬Í¼ÐεĻæÖÆÍ¨³£ÊÇÔÚViewÀàÖÐÍê³ÉµÄ£¬Í¬Ê±Ò²»áÓõ½¸÷Öֿؼþ£¬È磺TextView£¬Button£¬Spinner£¬GridView£¬ImageView¡£µ±È»Ëµµ½¿Ø¼þ£¬ÈÝÆ÷¾Í²»µÃ²»ÌáÁË£¬Á½ÕßÊÇϢϢÏà¹ØµÄ¡£±¾Éè¼ÆÖÐÓõ½ÁË×î³£ÓõÄLinearLayoutÈÝÆ÷£¬¿Ø¼þµÄ²¼¾ÖÒ²Óõ½ÁËÏà¶Ô²¼¾Ö£¬¾ø¶Ô²¼¾ÖµÈ¡£

4.1.1 Ñ¡Ôñ½çÃæ²¼¾Ö

Ñ¡Ôñ½çÃæÔÚmain.xmlÎļþÖв¼¾Ö£¬½çÃæÐ§¹ûÈçͼ4.1.1 £º

ͼ4.1.1 Ñ¡Ôñ½çÃæ

¸Ã½çÃæ²ÉÓÃLinearLayout²¼¾Ö£¬ÔÚLinearLayout±êÇ©ÖÐÍê³É½çÃæÉèÖá£

²¼¾ÖÉèÖãºÉèÖò¼¾ÖÅÅÁз½Ê½ÎªÊúÖ±ÅÅÁУ¬¿íºÍ¸ßµÄֵΪÌîÂú£¬±³¾°ÑÕɫΪºÚÉ«¡£´úÂëÈçÏ£º

android:orientation=\

8

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

android:layout_width=\

android:layout_height=\

ÏÂÃæ¸ø³ö¹¹³É¸Ã½çÃæµÄһЩ»ù±¾¿Ø¼þµÄÉèÖôúÂ룺

ÉèÖÃÎı¾¿òµÄ¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£¬Îı¾ÄÚÈÝ´ÓvaluesÎļþ¼ÐÖеÄstrings.xmlÎÄ

¼þÖжÁÈ¡£¬ÄÚÈÝΪ¡°µÈ¼¶¡±£º

android:layout_width=\ android:layout_height=\ android:text=\

style=\ ÉèÖÃÏÂÀ­ÁбíµÄ¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£º android:layout_width=\ android:layout_height=\

ÉèÖÃÎı¾¿ò¸ß¸ù¾ÝÄÚÈݵ÷Õû£¬¿íΪÌîÂú£¬Îı¾ÄÚÈÝÈ¡×ÔvaluesÎļþ¼ÐÏÂstrings.xml

Îļþ£¬ÄÚÈÝΪѡÔñÍ¼Æ¬Çø£º

android:layout_width=\ android:layout_height=\ android:text=\ style=\

android:background=\ ÉèÖÃÍø¸ñÊÓͼ¿íºÍ¸ßΪÌîÂú£º android:layout_width=\ android:layout_height=\

ÉèÖð´Å¥ÊôÐÔ£¬¿íºÍ¸ßΪ¸ù¾ÝÄÚÈݵ÷Õû£¬°´Å¥ÄÚÈÝÈ¡×ÔvaluesÎļþ¼ÐµÄstrings.xmlÎļþ£¬ÄÚÈÝΪ¡°È·¶¨¡±£º

android:layout_width=\

android:layout_height=\ android:text=\ style=\ android:layout_gravity=\

4.1.2 ÓÎÏ·½çÃæ²¼¾Ö

ÓÎÏ·½çÃæÔÚjigsaw.xmlÎļþÖв¼¾Ö£¬½çÃæÐ§¹ûÈçͼ4.1.2£º

9

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

ͼ4.1.2 ÓÎÏ·½çÃæ

¸Ã½çÃæÍ¬Ñù²ÉÓÃLinearLayout²¼¾Ö£¬ÔÚLinearLayout±êÇ©ÖнøÐлù±¾ÉèÖᣠ²¼¾ÖÉèÖ㺸ߺͿíΪÌîÂú£¬ÅÅÁз½Ê½ÎªÊúÖ±ÅÅÁУ¬±³¾°ÑÕɫΪºÚÉ«¡£´úÂëÈçÏ£º android:layout_width=\ android:layout_height=\ android:orientation=\

android:background=\

ÏÂÃæ¸ø³öÓÎÏ·½çÃæÆäËû¿Ø¼þµÄÉèÖÃÄÚÈݺÍÏà¹Ø´úÂ룺

ÉèÖÃÎı¾¿òµÄ¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£¬Îı¾¿òµÄÄÚÈÝÈ¡×Ôstrings.xml£¬ÄÚÈÝΪ¡°Ô¤

ÀÀ¡±£¬Î»ÖþÓÖУº android:layout_width=\ android:layout_height=\ android:text=\ style=\ android:layout_gravity=\

ÉèÖÃͼƬ¿ò¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£¬Í¼Æ¬È¡×ÔdrawableÎļþϵÄpingtu_6 £º android:layout_width=\

android:layout_height=\ android:src=\

10

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

ÉèÖÃÎı¾¿ò¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£¬Îı¾¿òÄÚÈÝÈ¡×Ôstrings.xmlÖеÄlevel2£¬ÄÚÈÝΪ

¡°µÈ¼¶¡±£º

android:layout_width=\ android:layout_height=\ android:text=\

style=\

ÉèÖÃÎı¾¿ò¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£¬Îı¾¿òÄÚÈÝÈ¡×Ôstrings.xmlÖеÄstepNum£¬ÄÚÈÝΪ¡°²½Êý¡±£º

android:layout_width=\ android:layout_height=\ android:text=\ style=\

ÉèÖÃÎı¾¿ò¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£¬Îı¾¿òÄÚÈÝÈ¡×Ôstrings.xmlÖеÄtime£¬ÄÚÈÝΪ¡°Ê±

¼ä¡±£º

android:layout_width=\ android:layout_height=\ android:text=\

style=\

ÉèÖð´Å¥¸ßºÍ¿í¸ù¾ÝÄÚÈݵ÷Õû£¬Îı¾¿òÄÚÈÝÈ¡×Ôstrings.xmlÖеÄplay£¬ÄÚÈÝΪ¡°play¡± android:layout_width=\ android:layout_height=\ android:text=\ android:textSize=\

4.2 ÓÎÏ·¹¦ÄÜʵÏÖ

ÓÎÏ·´úÂë¾ßÌåÔËÐÐÁ÷³ÌÊÇÕâÑùµÄ£ºÓÎÏ·Æô¶¯ºó£¬Æô¶¯MainActivity£¬½Ó׿ÓÔØmain.xml³õʼ»¯Ñ¡Ôñ½çÃæ£¬ÔÚÍê³ÉÄѶÈÑ¡ÔñºÍͼƬѡÔñºó£¬µã»÷¡°È·¶¨¡±°´Å¥£¬ÔËÐÐMainActivityÀàÖеļàÌýÆ÷btnOnClickListenerÌø×ªÔÚJigsawActivity£¬²¢¼ÓÔØjigsaw.xmlÎļþ³õʼ»¯ÓÎÏ·½çÃæ£¬È»ºó¸ù¾Ý½çÃæÉϵÄÄÚÈݽøÐÐÓÎÏ·¡£

Õû¸öÉè¼Æ¹ý³ÌÖÐÖ÷ÒªÍê³ÉÒÔϹ¦ÄÜ£ºÄѶÈÑ¡Ôñ£¬Í¼Æ¬Ñ¡Ôñ£¬²½ÊýºÍ¼ÆÊ±¹¦ÄÜ,ƴͼ¹¦ÄÜ¡£

4.2.1 ÄѶÈÑ¡Ôñ

ÔÚÑ¡Ôñ½çÃæµã»÷¡°µÈ¼¶¡±ºóµÄÏÂÀ­ÁÐ±í£¬Ìø³öÏÂÀ­Áбí¿ò£¬¹©Íæ¼ÒÑ¡ÔñÄѶȣ¬ÔÚ MainActivityÖе¼ÈëMainImplÀàºÍIMainÀàÓÃÓÚʵÏÖÄѶÈÑ¡Ôñ¡£MainImplÀàÖж¨ÒåÁË getLevelAdapter·½·¨£¬Ê¹ÓÃList£¨£©½«ËÄÖÖÄѶȵȼ¶´æÈëÁÐ±í£¬ÒÔ¹©Ñ¡Ôñ¡£

getLevelAdapter·½·¨µÄ´úÂëÈçÏ£º

public ArrayAdapter getLevelAdapter(Context context) { 11

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

List list=new ArrayList();

String[] level=context.getResources().getStringArray(R.array.levelArray); for(String str:level){

list.add(str); }

ArrayAdapter cityArrayAdapter=new

ArrayAdapter(context,android.R.layout.simple_spinner_item,list); cityArrayAdapter.setDropDownViewResource(android.R.layout.simple_ spinner_dropdown_item); return cityArrayAdapter; }

ÔÚMainActivityÖиøÄѶÈÑ¡Ôñ¶¨ÒåÁ½¸ö¼àÌýÆ÷ItemClickListener£¬Íæ¼Òµ¥»÷ÏÂÀ­ÁÐ±í£¬¾Í»áÆô¶¯ItemClickListener£¬Íæ¼Òµã»÷ËĸöÄѶÈÖеÄÒ»ÖÖºóÓÖ»áÆô¶¯ÁíÒ»¸ö¼àÌýÆ÷ ItemSelectedListener¡£Íæ¼ÒÑ¡ÔñÍ꣬ѡÔñµÄÄѶȽ«»á´«»ØActivity¡£

¼àÌýÆ÷µÄ¼òµ¥´úÂëÈçÏ£º

private class ItemSelectedListener implements OnItemSelectedListener{ }

public void onItemSelected(AdapterView adapterView, View view, int position, long rowid) { pictureIndex=position; }

public void onNothingSelected(AdapterView arg0) { }

4.2.2 ͼƬѡÔñ

Ñ¡Ôñ½çÃæ»áÁоٳö9ÖÖͼƬ¹©Íæ¼ÒÑ¡Ôñ¡£Í¼Æ¬Áоٹ¦ÄÜÊÇÓÉMainActivityÖÐµÄ showGridView·½·¨ºÍgetAllItemsForListView·½·¨Íê³ÉµÄ¡£showGridView·½·¨»ñÈ¡ÆÁÄ»´óС£¬¸ù¾ÝscreenWidtºÍscreenHeight×Ô¶¯µ÷ÕûͼƬ´óС£¬±£Ö¤½çÃæµÄÃÀ¹Û¡£¶øgetAllItemsForListView·½·¨Éú³É¶¯Ì¬Êý×éimageItem£¬²¢ÇÒ´«ÈëÊý¾Ý£¬½«Í¼Æ¬Ò»Ò»ÁоٳöÀ´¡£Íæ¼Òµã»÷Ò»ÕÅͼƬ²¢°´Ï¡°È·¶¨¡±°´Å¥Ê±£¬½«Ñ¡ÔñµÄͼƬͬʱ´«µÝ¸øJigsawActivity¡£´úÂëÈçÏ£º

private void showGridView(){ DisplayMetrics dm = new DisplayMetrics();

dm = this.getApplicationContext().getResources().getDisplayMetrics(); pictureGridView.setColumnWidth((screenWidth-10*4)/3); SimpleAdapter saImageItems = new SimpleAdapter(this, getAllItemsForListView(), R.layout.grid_item, new String[] { \ new int[] { R.id.gridItem_imgView}); pictureGridView.setAdapter(saImageItems); pictureGridView.setSelector(R.drawable.menuitemshape);

12

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

}

Áгö9ÕÅͼƬ£¬²¢Ñ¡ÔñÒ»ÕÅͼƬ½øÐÐÓÎÏ·ÊÇÔÚgetAllItemsForListView()·½·¨ÖÐʵÏֵģ¬

Ôڸ÷½·¨ÖÐÉú³ÉÁ˶¯Ì¬Êý×éimageItem£¬½«¸÷¸öͼƬµÄÐòºÅ´«ÈëÁËÊý×éÖС£ public List> getAllItemsForListView() { List> imageItem = new ArrayList>(); for (int i=0;i tempMap = new HashMap(); tempMap.put(\ imageItem.add(tempMap); } return imageItem;

}

4.2.3 ²½ÊýºÍʱ¼äÉèÖÃ

ÔÚJigsawActivityµÄinitControls·Ö±ð¸østepNumTVºÍtimeTV×ö³ö¶¨Òå¡£Íæ¼Òµã»÷½çÃæÉϵġ°play¡±°´Å¥£¬Æô¶¯onClick·½·¨£¬¸Ã·½·¨¿ªÊ¼¸ø²½ÊýºÍʱ¼ä¸³³õÖµ¡£¹ØÓÚʱ¼äÉèÖ㬻¹¸ø³öÁËʱ¼äµÄ·ÖÃëÉèÖá£ÕâÊÇÔÚtimeParser·½·¨ÖÐʵÏֵģ¬Ã¿¹ý60Ã룬·ÖÖÓ¼Ó1¡£ÓÎÏ·¹ý³ÌÖÐÍ¼Æ¬ÒÆ¶¯Ò»´Î£¬²½Êý¼Ó1¡£¾ßÌåʵÏÖÈçÏ£º

ÔÚÓÎÏ·¹ý³ÌÖУ¬ÃëÊýÒ»Ö±ÔÚ¼ÓÒ»£¬ÕâһʵÏÖÌåÏÖÔÚGameRunable ÀàÖеÄrun·½·¨ÖС£µ±È»ÔÚÃëÊý¼Ó1֮ǰҪÏÈÅжÏÊÇ·ñΪÓÎϷ״̬£¬´úÂëΪ£º public void run() { while(isGaming){ try { second++; Message msg=new Message(); msg.what=TIME_MESSAGE; mHandler.sendMessage(msg); Thread.sleep(1000); // } catch (InterruptedException e) { e.printStackTrace(); } }

²½ÊýºÍʱ¼äµÄÔËÐж¼ÊÇhandleMessage·½·¨ÖÐʵÏÖ£¬Ôڸ÷½·¨ÖÐͨ¹ýswitch¡ªcaseÓï¾äʵÏÖÅжϡ£

public void handleMessage(android.os.Message msg){ switch(msg.what){ case TIME_MESSAGE: break; case INIT_MESSAGE: break; }

13

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

super.handleMessage(msg); }

4.2.4 ƴͼµÄʵÏÖ

ÔÚJigsawActivityÖнøÐÐÓÎϷʱÊ×ÏÈÒª½â¾öµÄÎÊÌâ¾ÍÊÇͼƬµÄËæ»ú·Ö¸îÎÊÌâ¡£¸ÃÎÊÌâµÄ½â¾ö·½°¸ÔÚJigsawViewÀàÖУ¬JigsawActivityÖ»Êǵ¼ÈëÁ˸ÃÀà¡£ÔÚ¸ÃÀàÖж¨ÒåÁËÏ൱¶àµÄ±äÁ¿£¬¾ßÌåÈçÏ£º private Bitmap[] oBitamp;//³õʼ»¯ÇиîºóµÄͼƬÊäÊý×é private int row=2;//ÐÐ private int col=2;//ÁÐ private int cutBitmapWidht;//ÇиîºóÿÕÅλͼµÄ¿í private int cutBitmapHeight;//ÇиîºóÿÕÅλͼµÄ¸ß private float x,y;//µ±È»´¥·¢µÄX,Y×ø±ê private int offsetW,offsetH;//Æ«ÒÆÁ¿¿í¶È\\¸ß¶È private int maxRectW,maxRectH;//×î´ó¾ØÐοí,¸ß private PointF downPoint=new PointF();//´¥·¢µÄ×ø±êµã private PointF currPoint=new PointF();//µ±Ç°×ø±êµã private int step=0;//²½Êý

private boolean isGameing=false;//ÊÇ·ñÓÎÏ·ÖÐ

¸ÃÎÊÌâµÄ½â¾öÉæ¼°µ½Ëæ»úºÍ·Ö¸îÁ½¸öËã·¨¡£¹ØÓÚËæ»úµÄÎÊÌ⣬Ëã·¨ÖÐʹÓÃÁËrandomGenerated ·½·¨£¬¸Ã·½·¨Ëæ»úÉú³É0-n·¶Î§ÄÚ²»Öظ´µÄÊý×Ö£¬²»°üº¬n¡£ÔÚMathÀàÖÐÓж¨ÒåµÄrandom·½·¨£¬Òò´ËÖ»ÐèÒªµ÷ÓÃÒÔÏ¡£´úÂëÈçÏ£º private void randomGenerated(int n){ Vector vector=new Vector(); int[] num=new int[n]; for(int i=0;i

14

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

cutBitmap(mBitmap); }

·Ö¸îͼƬÊÇͨ¹ýcutBitmap·½·¨ÊµÏֵ쬶¨ÒåÁËcutBitmaoWidth£¬cutBitmapHeight±äÁ¿

±íʾ·Ö¸îºóͼƬµÄ¿íºÍ¸ß£¬²¢¸ù¾ÝÄѶÈÑ¡ÔñµÄÐÐÊýºÍÁÐÊý³õʼ»¯·Ö¸îºóµÄͼƬÊýÊý×é¡£¾ßÌå´úÂëÈçÏ£º

private void cutBitmap(Bitmap srcBitamp){ cutBitmapWidht=srcBitamp.getWidth()/row; //·Ö¸îºóÿÕÅλͼµÄ¿í¡£ cutBitmapHeight=srcBitamp.getHeight()/col; //·Ö¸îºóÿÕÅλͼµÄ¸ß¡£ offsetW=cutBitmapWidht; //Æ«ÒÆÁ¿¿í¶È¡£ offsetH=cutBitmapHeight; //Æ«ÒÆÁ¿¸ß¶È¡£ oBitamp=new Bitmap[row*col]; //³õʼ»¯ÇиîºóµÄͼƬÊýÊý×é¡£ for(int i=0;i

}

ÓÃrandomGenerated ·½·¨½â¾öÁËÍ¼Æ¬Ëæ»ú·Ö¸îµÄÎÊÌâÖ®ºó£¬½ÓמÍÊÇÓÎÏ·µÄÔËÐм´½»»»Í¼Æ¬¹¦ÄܵÄʵÏÖ¡£Ê×ÏÈÈ·±£Êó±êµã»÷²¢Í϶¯Í¼Æ¬ÓÐЧ£¬È»ºóʵÏÖͼƬµÄ½»»»¡£ÎªÈ·±£Êó±êµã»÷ºÍÍ϶¯ÓÐЧ£¬¶¨ÒåonTouchEvent·½·¨½øÐлµÄÅжϣ¬¸Ã·½·¨Öж¨ÒåÁËx£¬yÁ½¸ö±äÁ¿±íÊ¾×ø±ê£¬À´ÏÔʾÊó±êµã»÷µÄλÖá£

onTouchEvent·½·¨Öж¨ÒåÁËÈçÏÂÁ½¸ö±äÁ¿£º x=event.getX(); y=event.getY(); ͨ¹ýÈçÏÂÓï¾äʵÏÖÅжÏÊó±êµÄ»î¶¯£º°´Ï£¨MotionEvent.ACTION_DOWN£©£¬À뿪£¨MotionEvent.ACTION_UP£©£¬Òƶ¯£¨MotionEvent.ACTION_MOVE£©¡£ if(!((x<=maxRectW)&&(y<=maxRectH))){ return false; } switch(event.getAction()){ case MotionEvent.ACTION_DOWN:{ } case MotionEvent.ACTION_UP:{

15

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ

}

case MotionEvent.ACTION_MOVE:{ } }

return super.onTouchEvent(event); }

½»»»Í¼Æ¬µÄ¶¯×÷ÓÉswapPicture·½·¨ÊµÏÖ£¬½»»»´úÂë¼òµ¥ÈçÏ£º int value;

value=picture1.value; picture1.value=picture2.value;

picture2.value=value;

16

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ5Õ ϵͳ²âÊÔ

5 ϵͳ²âÊÔ

5.1 Android·ÂÕæÆ÷½éÉÜ

·ÂÕæÆ÷ÊÇÔÚ¼ÆËã»úÖÐÔËÐеÄÒ»¸öÐéÄâµÄÒÆ¶¯×°ÖÃ,ÓÃËüÀ´Éè¼Æ¡¢µ÷ÊÔÓ¦ÓᣠADTÊÇÒ»¸öÓÃÓÚ¿ª·¢AndroidÓ¦ÓõÄeclipse²å¼þ,Ëü·½±ãÁËÎÒÃǵĿª·¢¡£ÀýÈç,ËüÈÃÎÒÃÇ·½±ã´ÓeclipseÄÚ²¿·ÃÎÊDDMS¹¤¾ß(¿ÉÓÃÓÚ½ØÆÁ,¹ÜÀíport-forwarding,Éè¶Ïµã,²é¿´Ï̺߳ͽø³ÌÐÅÏ¢)

DDMS(Dalvik Debug Monitor Service)ºÍDalvikÐéÄâ»ú¼¯³É,½«ÔÚIDEºÍÄ£ÄâÆ÷Æðµ½Ò»¸öת·¢·þÎñ¡£ÓÃËüÄܹÜÀí·ÂÌîÆ÷»òÕßÉ豸µÄ½ø³Ì,²¢ÇÒ¸¨Öúµ÷ÊÔ¡£Äã¿ÉÓÃËüɱËÀ½ø³Ì,Ñ¡Ôñijһ½ø³ÌÈ¥DEBUG,²úÉúTRACEÊý¾Ý,²é¿´¶ÑºÍÏß³ÌÐÅÏ¢µÈµÈ¡£

Aapt(Andvoid Asset Packaging Tool),ÓÃÓÚ´´½¨.apkÎļþ¡£ Aidl(Andvoid Interface Description Language)ÓÃÓÚ²úÉú´úÂë¡£ Sqlite3ÓÃÓÚ·ÃÎÊSQLiteÊý¾ÝÎļþ¡£ TraceviewÓÃÓڲ鿴LOGÐÅÏ¢

Dx¹¤¾ßÓÃÓÚÖØÐ´.class×Ö½ÚÂëµ½Andvoid×Ö½ÚÂë¡£

ActivityCreatorÓÃÓÚ²úÉúantÎļþµÄ½Å±¾¡£µ±È»,ÈôÓÃeclipse²å¼þ¾Í²»ÐèÒªËüÁË¡£

5.2 ¹¦ÄÜÄ£¿é²âÊÔ

ÔÚÐéÄâÆ÷ÉÏÍê³ÉÒ»´ÎƴͼÓÎÏ·£¬¼´¿É²âÊÔ³ö±¾Éè¼ÆÊÇ·ñÒѾ­Íê³É¡£ÏÂÃæ¸ø³ö¸÷¸ö¹¦ÄÜÄ£¿éµÄ²âÊÔ¹ý³Ì£¬ÈôÕâЩ¹¦ÄÜÔÚÄ£ÄâÆ÷É϶¼Äܵõ½ÌåÏÖ£¬Ôò˵Ã÷±¾Éè¼Æ»ù±¾³É¹¦¡£

1£© ÄѶÈÑ¡ÔñÄ£¿é£º

ÔÚÑ¡Ôñ½çÃæµã»÷¡°µÈ¼¶¡±ÏÂÀ­¿ò£¬Ñ¡ÔñÒ»¸öÄѶȣ¬°´Ï¡°È·¶¨¡±°´Å¥ºóÌø×ªµ½ÓÎÏ·½çÃæ£¬ÔÚÓÎÏ·½çÃæµÄÎı¾¿ò¡°µÈ¼¶¡±ÏÂÏÔʾ³öÍæ¼ÒÑ¡ÔñµÄÄѶȡ£

½çÃæÈçÏ£º

17

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ5Õ ϵͳ²âÊÔ

ͼ5.2.1 ÄѶÈÑ¡ÔñÄ£¿é

2£© ͼƬѡÔñÄ£¿é£º

ÔÚÑ¡Ôñ½çÃæµã»÷Ò»ÕÅͼƬ£¬°´Ï¡°È·¶¨¡±°´Å¥ºóÌø×ªµ½ÓÎÏ·½çÃæ£¬ÔÚÓÎÏ·½çÃæµÄͼƬ¿òÖÐÏÔÊ¾Íæ¼ÒÑ¡ÔñµÄͼƬ¡£

½çÃæÈçÏ£º

18

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ5Õ ϵͳ²âÊÔ

ͼ5.2.2 ͼƬѡÔñÄ£¿é

3£© ²½ÊýºÍʱ¼äÉèÖÃÄ£¿é£º

ÔÚÓÎÏ·½çÃæ£¬µã»÷¡°play¡±°´Å¥ºó£¬Ê±¼ä¿ªÊ¼×Ô¼Ó1Ãë£¬Ã¿ÒÆ¶¯Ò»¸öͼ¿é£¬²½ÊýÒ»À¸¼Ó1 ¡£

½çÃæÈçÏ£º

ͼ5.2.3 ²½ÊýºÍʱ¼äÉèÖÃÄ£¿é

4£© ÓÎϷʵÏÖÄ£¿é£º

ÔÚÓÎÏ·½çÃæ£¬µã¡°play¡±°´Å¥ºó£¬Êó±êµã»÷ͼ¿é²¢Í϶¯£¬ÄÜÓë¿Õ°×ͼ¿é½»»»Î»Öᣵ±Í¼Æ¬Æ´³ÉÔ­Ñùʱ£¬µ¯³ö´°¿ÚÌáʾÓÎÏ·½áÊø¡£

½çÃæÈçÏ£º

19

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ5Õ ϵͳ²âÊÔ

ͼ5.2.4 ÓÎϷʵÏÖÄ£¿é

5.3 ³öÏֵĴíÎó¼°½â¾ö·½°¸

Íê³ÉϵͳµÄ¹ý³ÌÖв»¿É±ÜÃâµÄ³öÏÖÁËһЩÎÊÌ⣬ͨ¹ý×ÔÎÒѧϰºÍËûÈËÖ¸µ¼£¬×îÖÕ½â¾öÁËÕâЩÎÊÌâ¡£¾ßÌå´íÎóºÍ½â¾ö·½°¸Èçϱí5.1£º

±í5.1 ´íÎó¼°½â¾ö·½°¸¶ÔÕÕ±í

ϵͳ³öÏֵĴíÎó ½â¾ö·½°¸ ActivityÖ®¼äµÄ½çÃæÌø×ªÎÞ·¨ÊµÏÖ ¸÷¸ö¿Ø¼þÖ®¼äµÄÁ´½Ó³ö´í ÔËÐÐÓÎϷʱ£¬ÏµÍ³±¨´í£¬ÎÞ·¨Õý³£ÓÎÏ· ÔÚActivity.javaÖиø³ö½çÃæÌø×ªµ½ÏÂÒ»¸öActivity±ØÐëµÄ´úÂëʵÏÖ¡£ ÔÚͬһ¸ö½çÃæÖеĿؼþÖ®¼äµÄÁªÏµ¿ÉÒÔͨ¹ýÔÚActivity.javaÖбàд´úÂëÀ´ÊµÏÖ¡£ ¼ì²éSDK°æ±¾ÒÔ¼°·ÂÕæÆ÷µÄÅäÖᣠ20

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ6Õ ×ܽáÓëÕ¹Íû

6 ×ܽáÓëÕ¹Íû

´óѧËÄÄêѧϰµÄ±à³Ì˼ÏëºÍ±à³Ì¼¼ÇÉ£¬ÔÚ×îºóµÄ±ÏÒµÉè¼Æµ±Öеõ½ÁËÔËÓ᣾­¹ý´Ë´Î±ÏÒµÉè¼Æ£¬³ä·ÖÈÏʶµ½ÁË×Ô¼º±à³ÌÄÜÁ¦·½ÃæµÄȱÏÝ£¬¸Ð¾õµ½×Ô¼ºµÄ»ù´¡±È½Ï±¡Èõ¡£µ«ÔÚÕâ¶Îʱ¼äÀÎÒ²»¶ÏµØ·¢ÏÖ×Ô¼ºµÄÎÊÌ⣬²¢ÇÒÕÒ³öÎÊÌâ²úÉúµÄÔ­Òò£¬¸ù¾ÝÏà¹ØµÄ·½·¨½â¾öÎÊÌâ¡£¼¸¸öÔµÄŬÁ¦Ã»Óа׷ѣ¬ÖÕÓÚ»ù±¾ÉÏÍê³ÉƴͼÓÎÏ·µÄ¹¦ÄÜ£¬ËäÈ»»¹Óв»ÉÙ²»×㣬ÎÒ½«²»¶ÏµÄÍêÉÆËü¡£

×öÒ»¸öÍêÕûµÄϵͳ֮ǰ£¬±ØÐëÏȶԸÃϵͳ½øÐÐÐèÇó·ÖÎö£¬ÄâºÃϵͳÐèÒª´ïµ½µÄ¹¦ÄܺÍϵͳµÄËùÓÐÐèÇ󣬲¢ÇÒ»­³öϵͳµÄ´óÌåÉè¼ÆÁ÷³ÌͼºÍ¿ò¼Ü¡£×öÍêÕâЩ׼±¸¹¤×÷£¬×öϵͳµÄʱºò²Å»áµÃÐÄÓ¦ÊÖ¡£Ïëµ½ÄÇÀï¾Í×öµ½ÄÇÀ²»½öЧÂʲ»¸ß£¬»¹»áÓ°Ï쵽ϵͳµÄ¿ÉÓÃÐÔ¡£

Íê³Éϵͳ֮ºó²Å·¢ÏÖ£¬¶ÔÓÚÈí¼þÉè¼Æ£¬ÒªÏë×öµ½µÃÐÄÓ¦ÊÖ£¬±ØÐë¶à¶àÁ·Ï°¡£Ö»ÓÐд¹»×ã¹»¶àµÄ´úÂ룬²ÅÄÜÕæÕýÀí½âÈí¼þÉè¼ÆµÄ˼Ïë¼°ÔËÓᣵ±È»Òª×öµ½ÕâÒ»²½£¬Òª¸¶³öÏ൱¶àµÄŬÁ¦£¬ÔÚûÓÐ×öµ½Ö®Ç°£¬Óöµ½²»¶®µÄµØ·½¾ÍÒª¶à²Î¿¼×ÊÁÏ£¬Çë½Ì±ðÈË¡£

21

½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ ²Î¿¼ÎÄÏ×

²Î¿¼ÎÄÏ×

[1] (ÃÀ)Eric J£®Baucle£®Èí¼þÉè¼Æ¡ª¡ª´Ó³ÌÐòÉè¼Æµ½Ìåϵ½á¹¹[M]£®ÀîÈÊ·¢µÈÒ룮±±¾©£º µç×Ó¹¤Òµ³ö°æÉ磬2007£®

[2] ¿×ÁîµÂ£®±ÏÒµÉè¼Æ°¸Àý½Ì³Ì¡ª¡ª´Óϵͳ¿ª·¢µ½ÂÛÎÄд×÷[M]£®±±¾©£º¹ú·À¹¤Òµ³ö°æÉ磬2007£®

[3] (ÃÀ)Íþ¶û¶Ù£¬Âó¿ÉÆ¥¿Ë£®JavaScriptÈëÞ­µä(µÚ3°æ)[M]£®±±¾© Ê©ºê±óÒ룮±±¾©£ºÇ廪´óѧ³ö°æÉ磬2009£®

[4] E2ECloud¹¤×÷ÊÒ£®ÉîÈëdz³öGoogle Android[M]£®±±¾©£ºÈËÃñÓʵç³öÉ磬2009£®08£® [5] ÓàÖ¾ÁúµÈ£®Android SDK¿ª·¢·¶Àý´óÈ«[M]£®±±¾©£ºÈËÃñÓʵç³ö°æÉ磮2009£® [6] Ò¦ÉÐÀÊ£¬½ùÑÒ£®Google Android¿ª·¢ÈëÃÅÓëʵ¼ù [M]£®±±¾©£ºÈËÃñÓʵç³ö°æÉ磬2009£® [7] ÓàÖ¾ÁúµÈ£®Google Android SDK¿ª·¢·¶Àý´óÈ«£¨µÚ¶þ°æ£©[M]£®±±¾©£ºÈËÃñÓʵç³ö°æÉ磬2010£®

[8] Àî´¬Î죮ÖÇÄÜÊÖ»úÔ­ÀíÓëδÀ´·¢Õ¹[J]£®¿Æ¼¼ÓëÉú»î£¬2010£¬µÚ1¾í5£¨ÆÚ£©£® [9] £¨ÃÀ£©Ä«·Æ£®Android¿ª·¢ÈëÃŽ̳Ì[M]£®±±¾©£ºÈËÃñÓʵç³ö°æÉ磬2010£® [10] ¹ùºêÖ¾£®AndroidÓ¦Óÿª·¢Ïê½â[M]£®±±¾©£ºµç×Ó¹¤Òµ³ö°æÉ磬2010£®

[11] Ðܸգ®»ùÓÚAndroidµÄÖÇÄÜÊÖ»úµÄÉè¼ÆÓëʵÏÖ[D]£®Î人£ºÎ人Àí¹¤´óѧ£¬2010£® [12] ¼ÖÀí»ª£¬ÀÖÑà·Ò£¬Ê©Î°±ó£®»ùÓÚAndroidƽ̨¼òÒ×¼´Ê±Í¨Ñ¶µÄÑо¿ÓëÉè¼Æ[J]£®³£Öݹ¤Ñ§ÔºÑ§±¨£¬2010£¬µÚ56¾í28£¨ÆÚ£©£®

[13] Ñî·áÊ¢£®AndroidÓ¦Óÿª·¢½ÒÃØ[M]£®±±¾©£º»úе¹¤Òµ³ö°æÉ磬2010£® [14] ÀîÄþ£®Android¿ª·¢È¨ÍþÖ¸ÄÏ[M]£®±±¾©£ºÈËÃñÓʵç³ö°æÉ磬2011£®

[15] ÎâÑǷ壮Android±à³ÌµäÐÍʵÀýÓëÏîÄ¿¿ª·¢[M]£®±±¾©£ºµç×Ó¹¤Òµ³ö°æÉ磬2011£®

22

¸½Â¼ ¸½ ¼

ƴͼÓÎÏ·Ö÷Òª´úÂ룺

1£©Ñ¡Ôñ½çÃæMainActivity´úÂë package com.angelnet.jigsaw.view; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog;

import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle;

import android.util.DisplayMetrics; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View;

import android.widget.AdapterView; import android.widget.Button; import android.widget.GridView;

import android.widget.SimpleAdapter; import android.widget.Spinner;

import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemSelectedListener; import com.angelnet.jigsaw.model.service.IMain; import com.angelnet.jigsaw.model.service.MainImpl; public class MainActivity extends Activity { private int screenWidth=0;//ÆÁÄ»µÄ¿í¶È private int screenHeight=0;//ÆÁÄ»µÄ¸ß¶È private Spinner levelSp;//µÈ¼¶ private GridView pictureGridView;//ͼƬ private Button confBtn; private static final int[]

pictureArray={R.drawable.pingtu_1_1,R.drawable.pingtu_2_2,R.drawable.pingtu_3_3, R.drawable.pingtu_4_4,R.drawable.pingtu_5_5,R.drawable.pingtu_6_6, R.drawable.pingtu_7_7,R.drawable.pingtu_8_8,R.drawable.pingtu_9_9}; private static final int AUTHOR_INFO_ID=Menu.FIRST;//×÷Õß¼ò½é private static final int ABOUT_ID=Menu.FIRST+1;//¹ØÓÚ private static final int EXIT_ID=Menu.FIRST+2;//Í˳ö private IMain iMain;

23

¸½Â¼ private int pictureIndex=0; @Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initControls(); showGridView(); }

private void initControls(){ iMain=new MainImpl();

levelSp=(Spinner)findViewById(R.id.main_level_spinner);

pictureGridView=(GridView)findViewById(R.id.main_picture_gridView); pictureGridView.setOnItemClickListener(new ItemClickListener());//¼àÌý

pictureGridView.setOnItemSelectedListener(new ItemSelectedListener());//Ñ¡Ôñ¼àÌý levelSp.setAdapter(iMain.getLevelAdapter(this));

confBtn=(Button)findViewById(R.id.main_confirm_btn); confBtn.setOnClickListener(btnOnClickListener); }

@Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, AUTHOR_INFO_ID, 0, R.string.author).setShortcut('1', 'i').setIcon(R.drawable.author_info); menu.add(0, ABOUT_ID, 0, R.string.about).setShortcut('2', 'a').setIcon(R.drawable.about);

menu.add(0, EXIT_ID, 0, R.string.exit).setShortcut('4', 'e').setIcon(R.drawable.exit); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){ case AUTHOR_INFO_ID:{ onCreateDialog(AUTHOR_INFO_DIALOG).show(); return true; } case ABOUT_ID:{ onCreateDialog(ABOUT_DIALOG).show(); return true; } case EXIT_ID:{ exitApp(); return true; }

24

¸½Â¼ }

return super.onContextItemSelected(item); }

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub

if(keyCode==KeyEvent.KEYCODE_BACK){ exitApp(); return true; }

return super.onKeyDown(keyCode, event); }

private static final int ABOUT_DIALOG=1;

private static final int AUTHOR_INFO_DIALOG=2; @Override

protected Dialog onCreateDialog(int id) { // TODO Auto-generated method stub switch (id) {

case ABOUT_DIALOG:{ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.alert_dialog_icon); builder.setTitle(R.string.about); builder.setMessage(R.string.aboutInfo); builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }); return builder.create(); }

case AUTHOR_INFO_DIALOG:{ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.alert_dialog_icon); builder.setTitle(R.string.author); builder.setMessage(R.string.authorInfo); builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }); return builder.create(); } }

return super.onCreateDialog(id);

25

¸½Â¼ } /** * ÏÔʾ¾Í¾Å¿Õ¸ñ */ private void showGridView(){ //»ñÈ¡ÆÁÄ»´óС DisplayMetrics dm = new DisplayMetrics();

dm = this.getApplicationContext().getResources().getDisplayMetrics(); screenWidth = dm.widthPixels; screenHeight = dm.heightPixels; //Á½ÁÐÖ®¼äµÄ±ß¾àΪ10

pictureGridView.setColumnWidth((screenWidth-10*4)/3); SimpleAdapter saImageItems = new SimpleAdapter(this, getAllItemsForListView(), R.layout.grid_item, new String[] { \ new int[] { R.id.gridItem_imgView}); pictureGridView.setAdapter(saImageItems); pictureGridView.setSelector(R.drawable.menuitemshape); } public List> getAllItemsForListView() { // TODO Auto-generated method stub // Éú³É¶¯Ì¬Êý×飬²¢ÇÒ´«ÈëÊý¾Ý List> imageItem = new ArrayList>(); for (int i=0;i tempMap = new HashMap(); // Bitmap bitamp=BitmapFactory.decodeResource(this.getResources(), pictureArray[i]); tempMap.put(\ imageItem.add(tempMap); } return imageItem; } /** * µ±AdapterView±»µ¥»÷(´¥ÃþÆÁ»òÕß¼üÅÌ)£¬Ôò·µ»ØµÄItemµ¥»÷ʼþ * */ private class ItemClickListener implements OnItemClickListener { /** * @param adapterView * The AdapterView where the click happened * @param arg1 * The view within the AdapterView that was clicked * @param position * The position of the view in the adapter

26

¸½Â¼ * @param rowid * The row id of the item that was clicked */ public void onItemClick(AdapterView adapterView, View view,int position, long rowid){ // ÔÚ±¾ÀýÖÐposition=rowid pictureIndex=position; } } /** * Ñ¡Ôñ¼àÌý */ private class ItemSelectedListener implements OnItemSelectedListener{ @Override public void onItemSelected(AdapterView adapterView, View view, int position, long rowid) { // TODO Auto-generated method stub // HashMap item = (HashMap) adapterView.getItemAtPosition(position); pictureIndex=position; } @Override public void onNothingSelected(AdapterView arg0) { // TODO Auto-generated method stub } } /** * Í˳öÓ¦ÓóÌÐò */ private void exitApp(){ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.question_dialog_icon); builder.setTitle(\Í˳ö\ builder.setMessage(\ÄúÈ·¶¨ÒªÍ˳öÒæÖÇÆ´Í¼Âð£¿\ builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { MainActivity.this.finish(); } }); builder.setNegativeButton(\È¡Ïû\ @Override

27

¸½Â¼ }

public void onClick(DialogInterface dialog, int which) { } });

builder.create().show(); }

private View.OnClickListener btnOnClickListener=new View.OnClickListener() { @Override

public void onClick(View v) {

// TODO Auto-generated method stub switch (v.getId()) {

case R.id.main_confirm_btn: Bundle extras=new Bundle(); extras.putInt(\ extras.putInt(\ Intent intent=new Intent(MainActivity.this, JigsawActivity.class); intent.putExtras(extras); startActivityForResult(intent, 1); break; } } };

2£©ÓÎÏ·½çÃæJigsawActivity´úÂ룺

package com.angelnet.jigsaw.view; import android.app.Activity; import android.graphics.Bitmap;

import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView;

import com.angelnet.jigsaw.model.widgets.JigsawView; public class JigsawActivity extends Activity { private ImageView previewImgView; private JigsawView mJigsawView; private TextView levelTV; private TextView stepNumTV; private TextView timeTV;

28

¸½Â¼ private Bitmap mBitmap; private Button startBtn; private boolean isGaming=false; private boolean isFirstThread=false; private boolean isPlay=false; /** * µÚÒ»´ÎÔËÐиÃActivityʱ£¬¾ÍÒªÔËÐÐonCreate·½·¨ * */ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.jigsaw); initControls(); } private void initControls(){ Bundle extras=this.getIntent().getExtras(); int level=extras.getInt(\ int pictureIndex=extras.getInt(\ previewImgView=(ImageView)findViewById(R.id.jigsaw_preview_imgview); mJigsawView=(JigsawView)findViewById(R.id.main_JigsawView); if(0==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_1); }else if(1==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_2); }else if(2==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_3); }else if(3==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_4); }else if(4==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_5); }else if(5==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_6); }else if(6==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_7); }else if(7==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_8); }else if(8==pictureIndex){

mBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pingtu_9); }

levelTV=(TextView)findViewById(R.id.jigsaw_level_tv); if(level==0){

mJigsawView.setRowCol(3, 3); levelTV.setText(\

29

¸½Â¼ }else if(level==1){

mJigsawView.setRowCol(3, 4); levelTV.setText(\ }else if(level==2){

mJigsawView.setRowCol(4, 3); levelTV.setText(\ }else if(level==3){

mJigsawView.setRowCol(4, 4); levelTV.setText(\ }

previewImgView.setImageBitmap(mBitmap); mJigsawView.setBitamp(mBitmap);

stepNumTV=(TextView)findViewById(R.id.jigsaw_stepNum_tv); stepNumTV.setText(String.valueOf(mJigsawView.getStep())); timeTV=(TextView)findViewById(R.id.jigsaw_time_tv); timeTV.setText(timeParser(second));

startBtn=(Button)findViewById(R.id.jigsaw_start_btn); startBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //¿ªÊ¼ÓÎÏ· if(!isPlay){ isPlay=true; }else{ mJigsawView.setBitamp(mBitmap); } isGaming=true; second=0; mJigsawView.setStep(0); mJigsawView.setGameing(isGaming); startBtn.setText(\ if(!isFirstThread){ isFirstThread=true; new Thread(new GameRunable()).start(); } Message msg=new Message(); msg.what=INIT_MESSAGE; mHandler.sendMessage(msg); } }; } /** *

30

¸½Â¼ * @param totalSecond * @return */

private String timeParser(int totalSecond) { StringBuffer sb = new StringBuffer(); int minute = totalSecond / 60; sb.append(minute); sb.append(\

int second = totalSecond % 60; if (second >= 10)

sb.append(second); else

sb.append(\ return sb.toString(); }

private int second=0;

class GameRunable implements Runnable{ public void run() {

// TODO Auto-generated method stub while(isGaming){ try { second++; Message msg=new Message(); msg.what=TIME_MESSAGE; mHandler.sendMessage(msg); Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }

private static final int INIT_MESSAGE=1; private static final int TIME_MESSAGE=2; Handler mHandler=new Handler(){ @Override

public void handleMessage(android.os.Message msg){ switch(msg.what){ case TIME_MESSAGE: stepNumTV.setText(String.valueOf(mJigsawView.getStep())); timeTV.setText(timeParser(second)); isGaming=mJigsawView.isGameing(); if(!isGaming) isFirstThread=false;

31

¸½Â¼ break; case INIT_MESSAGE: stepNumTV.setText(String.valueOf(mJigsawView.getStep())); timeTV.setText(timeParser(second)); mJigsawView.invalidate(); break; }

super.handleMessage(msg);

}

}

32

ÖÂл

Ö л

ËÄÄêµÄ´óѧÉú»î¼´½«²½ÈëβÉù£¬ÎÒÃǵÄУ԰Éú»î¾ÍÒª»®ÉϾäºÅ£¬ÐÄÖзdz£µÄ²»ÉáºÍ¾ìÁµ¡£³öÁË´óѧУÃÅ£¬ÎҾͽ«¿ªÊ¼ÐµÄÈËÉúÂó̡£

±ÏÒµÉè¼ÆÊÇÎÒ´óѧÉúÑĵÄ×îºóÒ»¸ö×÷ÒµÁË£¬½è´Ë»ú»áÊ×ÏÈÒª¸ÐлÅàÑøÎÒËÄÄêµÄ½ðÁê¿Æ¼¼Ñ§Ôº£¬ÌرðÊÇÔø¾­½Ìµ¼¹ýÎÒÃǵÄÀÏʦÃÇ£¬¸ÐлËûÃǶÔÎҵĽÌÓý£¬Ö¸µ¼ºÍ¹ØÐÄ¡£ÓÐÁËËûÃǵÄÖ§³Ö£¬ÎÒ²ÅÄÜ˳ÀûÍê³ÉËÄÄêµÄ´óѧѧϰÉúÑÄ¡£

Ê×ÏÈ£¬ÎÒÒª¸ÐлѧԺΪÎÒÌṩÁËÒ»´ÎÁ¼ºÃµÄ¶ÍÁ¶»·¾³£¬Íê³É´Ë´ÎÉè¼Æ£¬¶ÔÌá¸ßÎҵĸöÈËÄÜÁ¦ÓÐÏ൱´óµÄºÃ´¦£¬Äܹ»Ìá¸ß×ÔÉíÈí¼þ¿ª·¢ÄÜÁ¦£¬ÒÔ±ãÎÒÊÊÓ¦½«À´µÄ±à³Ì¹¤×÷¡£

ÓÉÓÚÎÒÔÚ×ö±ÏÒµÉè¼ÆµÄͬʱ£¬ÒѾ­¿ªÊ¼ÔÚ¹«Ë¾Éϰàʵϰ¡£ÔÚ¹«Ë¾Ñ§Ï°µ½µÄ±à³Ì֪ʶ¸ÕºÃÇ¿»¯ÁËÎÒ±¡ÈõµÄ±à³ÌÄÜÁ¦¡£ÓÉÓÚÀëУµÄÔ­Òò²»Äܼ°Ê±Á˽âѧУ¹ØÓÚ±ÏÒµÉè¼Æ¹¤×÷µÄ×îж¯Ì¬£¬ÐÒºÃÎÒµÄÖ¸µ¼ÀÏʦÀîÀòÀÏʦ±ü×ÅÈÏÕæ¸ºÔðµÄ̬¶È£¬¼°Ê±ÓëÎÒ¹µÍ¨£¬Í¨ÖªÎÒѧУµÄ×îа²ÅÅ¡£²¢ÇÒÕë¶ÔÎÒ±ÏÒµÉè¼Æ¹ý³ÌÖгöÏÖµÄһЩÎÊÌ⣬Ìá³öÖпϵÄÐÞ¸ÄÒâ¼û£¬ÒÔ±ãÎÒÄÜÒ»´ÎÐÔͨ¹ýѧУµÄÉó²é¡£ÔÚ´Ë£¬ÎÒ¶ÔÀîÀÏʦµÄÈÏÕæ¸ºÔðµÄÖ¸µ¼±íʾÖÔÐĵĸÐл¡£

Æä´Î£¬ÎÒ»¹Òª¸Ðл°ïÖú¹ýÎÒµÄͬѧ£¬Í¬Ê¡£ËûÃÇΪÎÒ½â¾öÁ˲»ÉÙÎÒ²»Ì«Ã÷°×µÄÉè¼ÆÉϵÄÄÑÌ⡣ûÓÐËûÃǵİïÖú£¬Ö»¿¿ÎÒÒ»¸öÈËÀ´ÃþË÷µÄ»°£¬¹À¼Æ»¹»á×ß²»ÉÙÍä·¡£

»ØÊ×´óѧÉú»îµÄϲŭ°§ÀÖ£¬¸Ð¿®Á¼¶à¡£Ôø¾­Ò»Æð×ß¹ýµÄÀÏʦÃÇ£¬Í¬Ñ§ÃÇ£¬¸ÐлÄãÃǵİïÖúºÍ¹ØÐÄ£¬Ã»ÓÐÄãÃǵÄÅã°é£¬ÎҵıÏÒµÉè¼Æ½«»áÓöµ½¸ü¶à¸üÄѵÃÎÊÌ⣬ллÄãÃÇ£¡

33