±Ï Òµ ÂÛ ÎÄ
Éè¼Æ(ÂÛÎÄ)ÌâÄ¿£º »ùÓÚ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
½ðÁê¿Æ¼¼Ñ§ÔºÑ§Ê¿Ñ§Î»ÂÛÎÄ µÚ4Õ ϵͳÏêϸÉè¼ÆÓëʵÏÖ
List
String[] level=context.getResources().getStringArray(R.array.levelArray); for(String str:level){
list.add(str); }
ArrayAdapter
ArrayAdapter
ÔÚ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
}
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 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 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 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