You are on page 1of 49

TNG LIN ON LAO NG VIT NAM

TRNG I HC TN C THNG
KHOA CNG NGH THNG TIN & TON NG DNG

TM HIU ANDROID & VIT NG DNG MINH HA GAME TOUCHTHEBALL

Tm hiu Android

|1

Sinh vin thc hin


Phan ng Huy .............................................................................................. 081260T Bi Nhn Hu ................................................................................................ 081248T Phng Th M Vin ........................................................................................ 081318T

Ti liu tham kho:

Android Developers
http://developer.android.com

Professional Android Application Development


Reto Meier

Tm hiu Android

|2

Mc lc
Blabla here here

1] Xin cho Android


H iu hnh m Cc ng dng c sn trn Android Truy cp phn cng Dch v chy nn SQLite Database H thng thng bo Ti u ha b nh v qun l{ tin trnh Android software development kit Kin trc ng dng Cc th vin ca Android 4 5 6 7 8

2] Xy dng ng dng u tin


Cc ci t cn thit To mi mt Android Project Ba loi ng dng trong Android

11
12 15 19

Tm hiu Android

|3

[1]
XIN CHO ANDROID
Android - h iu hnh dnh cho in thoi di ng c pht trin bi Google ngy cng tr nn ph bin vi vic cc hng in thoi lin tc ra mt cc mu in thoi s dng android.

Tm hiu Android

|4

Giao din mn hnh kha (Android 2.3)

Giao din mn hnh chnh (Android 2.3)

H iu hnh m
Android c xy dng trn nhn Linux v c phn phi min ph. Khng ging nh Windows Mobile v Apple iPhone, tuy c hai u cung cp mt mi trng pht trin ng dng phong ph v n gin d tip cn nhng lun c s u tin cho cc ng dng mc nh c sn ca h iu hnh (native applications). Vi Android mi ng dng u c vit trn cng mt tp API, th nn khng c s phn bit gia cc ng dng mc nh v cc ng dng ca bn th ba. Ngi dng hon ton c th thay th mi ng dng mc nh bng cc ng dng yu thch ca mnh, thm ch ngay c mn hnh thc hin cuc gi v mn hnh nh (home screen). Cc nh pht trin vit ng dng cho Android da trn ngn ng Java. S ra mt ca Android vo ngy 5 thng 11 nm 2007 gn vi s thnh lp ca lin minh thit b cm tay m ngun m, bao gm 78 cng ty phn cng, phn mm v vin thng nhm mc nh to nn mt chun m cho in thoi di ng trong tng lai. Google cng b hu ht cc m ngun ca Android theo bn cp php Apache.

Tm hiu Android

|5

Cc ng dng c sn trn Android (Native Applications)


Mt in thoi Android thng thng s i km vi mt vi ng dng c ci t sn, bao gm:

Mt trnh email tng thch vi Gmail. Chng trnh qun l{ tin nhn SMS. Chng trnh qun l{ thng tin c nhn, bao gm c lch lm vic, danh b, v c ng b ha vi dch v ca Google. Phin bn thu gn ca Google Map cho in thoi, bao gm StreetView, tm kim a im, ch ng, tnh trng giao thng,... Trnh duyt web da trn nhn WebKit. Chng trnh tn gu (chat). Trnh a phng tin (chi nhc, xem nh,). Android Marketplace cho php ngi dng ti v v ci t cc ng dng mi.

Tt c cc ng dng c sn u c vit bng ngn ng Java v s dng Android SDK. Cc d liu v thng tin ngi dng c cc ng dng c sn s dng - nh thng tin v danh b - vn hon ton c th c s dng bi cc ng dng ca bn th ba. Tng t vy, ng dng ca bn hon ton c th x l{ cc s kin nh c cuc gi n, nhn mt tin nhn mi, thay cho cc ng dng c sn.

Tip theo ta s ni v cc tnh nng hu ch m Android em li

Truy cp phn cng (Access Hardware)


Android bao gm th vin cc API gip n gin ha ti a vic s dng phn cng ca thit b. iu m bo rng bn khng cn phi bn tm nhiu n vic ng dng ca mnh c th chy nh mong i trn nhiu thit b khc nhau hay khng, min l thit b c h tr Android. Android SDK bao gm cc API cho phn cng nh: GPS, camera, kt ni mng, Wi-Fi, Bluetooth, con quay gia tc, mn hnh cm ng, qun l{ nng lng,

Tm hiu Android

|6

Dch v chy nn (Background Services)


Android h tr cc ng dng v dch v c thit k chy n. Do kch thc nh ca mn hnh in thoi nn ti mt thi im ch c th thy c mt ng dng. Dch v chy nn gip to ra cc thnh phn ng dng v hnh thc hin t ng mt tc v no m khng cn phi c s tng tc ca ngi dng. V d nh mt dch v chy nn c chc nng chn cuc gi n i vi cc s in thoi c trong black list chng hn.

SQLite Database
Bi v tnh cht nh gn v b hn ch v phn cng ca in thoi di ng, cho nn i hi vic lu tr v truy xut d liu phi nhanh chng v hiu qu. Android h tr h qun tr d liu nh gn SQLite, v cung cp cho ng dng cc API thao tc. Mc nh mi ng dng u c chy trong sandbox - iu ny c ngha l ni dung ca tng database ng vi tng ng dng ch c th c truy cp bng chnh ng dng . Tuy nhin cng c cc c ch ng dng c th chia s, trao i cc database vi nhau.

H thng thng bo (Notifications)


Thng bo l cch thc tiu chun m thit b bo cho ngi dng c mt s kin no xy ra. Chng hn nh c cuc gi ti, my sp ht pin, S dng cc API bn c th cho ng dng ca mnh thng bo n ngi dng bng m thanh, rung, hoc thm ch l c n LED ca thit b.

Ti u ha b nh v qun l tin trnh


Vic qun l{ b nh v tin trnh trong Android c mt cht khc bit. Ging nh cng ngh Java v .NET, Android s dng mt b run-time ca ring mnh vi cng ngh o ha qun l{ b nh ca cc ng dng ang chy. Khng ging nh nhng nn tng khc, Android run-time cng ng thi qun l{ lun c thi gian sng ca ng dng. Android m bo cc ng dng u c p ng bng cch dng v hy cc tin

Tm hiu Android

|7

trnh khng cn thit gii phng ti nguyn cho cc tin trnh c u tin cao hn. Trong bi cnh , u tin c xc nh ty thuc vo ng dng m ngi dng ang tng tc. Android m bo rng cc tin trnh c th b hy mt cch nhanh chng, nhng ng thi cng c th khi ng li nhanh khng km nu cn. iu ny thc s quan trng trong mt mi trng m bn thn ng dng khng th t kim sot c thi gian sng cho chnh mnh.

Android software development kit (SDK)


B SDK ca Android bao gm mi th cn thit gip bn c th lp trnh, debug, v test ng dng Android.

Android API Ct li ca b SDK l th vin cc API. V Google cng ch s dng b API ny xy dng cc ng dng c sn cho Android (native application). Development Tool SDK bao gm rt nhiu cng c gip bin dch, sa li, v h tr trong vic lp trnh ng dng. Android Emulator Trnh gi lp mt thit b chy Android thc s vi nhiu skin thay th, cc k tin li cho vic test ng dng Android ngay trn my tnh m khng cn phi thng qua mt thit b chy Android thc. Ti liu SDK bao gm b ti liu rt chi tit, gii thch cn k, chnh xc nhng g bao gm trong mi package, class cng vi cch s dng chng. Ngoi ti liu v code, cn c nhng ti liu dng getting started v gii thch cc nguyn tc v c ch hot ng ca ng dng trong Android. Code mu SDK bao gm cc ng dng mu n gin minh ha cho cc tnh nng ni bt trn Android, cng nh cc ng dng demo cch s dng nhng tnh nng ca b API.

i vi Eclipse IDE, Google cung cp mt plug-in gip kt hp cht ch gia Eclipse vi Android Emulator cng nh cng c debug. iu ny gip cho vic pht trin ng dng cho Android bng Eclipse thc s tr nn n gin.
ADT plug-in s c ni n chi tit hn trong chng 2

Tm hiu Android

|8

Kin trc ng dng (Application Architecture)


tng ca Android l khuyn khch vic ti s dng li cc thnh phn c, cho php ng dng ca bn c th chia s Activity, Service, D liu vi cc ng dng khc trong gii hn truy cp do bn t ra. Mt v d n gin: bn cn lm mt ng dng chp nh hn quc, v c bn ng dng ny s lm hai nhim v: mt l chp nh, hai l ghp, chnh sa nh. Thay v phi t xy dng chc nng chp nh, bn s s dng li chc nng chp nh c sn trong ng dng chp nh ca Android. Vic ny gip bn d dng v mau chng xy dng c nhng ng dng nhiu tnh nng v s dng hiu qu ti nguyn my. Nhng dch v di y l nn tng kin trc ca mi ng dng Android, y l khun kh cho bn xy dng ng dng ca ring mnh:

Activity Manager Kim sot vng i ca Activity. Views Xy dng giao din ngi dng cho cc Activity. Notification Manager Cung cp mt c ch thng nht v an ton ng dng c th a ra cc thng bo cho ngi dng. Content Providers Gip cho vic trao i, chia s d liu gia cc ng dng vi nhau. Resource Manager H tr qun l{ cc loi ti nguyn khng l code (non-code resources) nh cc chui, hnh nh, hoc m thanh,

Cc th vin ca Android
Android cung cp cc gi API pht trin ng dng. Danh sch cc gi core API di y gip cho bn c ci nhn tng qut v nhng g c h tr sn, tt c cc thit b chy Android u phi h tr c ti thiu cc API ny.

android.util Gi api li, cha cc class cp thp nh containers, string formatters, XML parsing.

Tm hiu Android

|9

android.os Truy cp ti cc chc nng ca h iu hnh chng hn nh: gi nhn tin nhn, giao tip ni b gia cc ng dng, thi gian, android.graphics Cung cp cc lp lin quan ti x l{ ha mc thp. H tr cc hm c bn nh v im, v min, t mu, trn mt khung canvas. android.text Cung cp cc hm phn tch v x l{ chui. android.database Cung cp cc lp cp thp cn thit lm vic vi databases. android.content Dng qun l{ cc ti nguyn, cc ni dung, v cc gi. android.view Views l lp cha ca mi lp giao din ngi dng. android.widget c k tha t lp View, bao gm cc lp c bn xy dng giao din widget nh: lists, buttons, layouts.
widget l mt dng ng dng mini - hin th mn hnh chnh - cung cp cc chc nng nho nh ly t ng dng ln.

android.maps Gi API cp cao, dng truy cp n cc chc nng ca GoogleMap. android.app Gi API cp cao, bao gm lp Activity v Service - hai lp c s cho mi ng dng Android. android.telephony Cung cp cho bn kh nng tng tc trc tip vi cc chc nng c bn ca mt chic in thoi nh nghe, gi, tin nhn. android.webkit Cung cp mt WebView control trn nn webkit c th nhng vo ng dng, cng vi cc api iu khin c bn nh stop, refresh, cookie manager,

Tm hiu Android

| 10

Tm tt
chng ny ta tm hiu c bn v h iu hnh m ngun m dnh cho cc thit b di ng Android. Cng nh nhng tnh nng ni bt m Android em li. ng thi cng tm hiu qua v b pht trin ng dng Android SDK. Chng tip theo ta s bt u bng vic ti v ci t b Android SDK cng nh cc thit lp cn thit trn Eclipse. Cng nh tm hiu lm th no s dng ADT (Android Developer Tools) plug-in vi Eclipse pht trin, debug, v test ng dng. Kt thc chng 2 ta cng s hon thnh xong ng dng u tin cho Android: Hello world!

Tm hiu Android

| 11

[2]
XY DNG NG DNG U TIN
Qua chng ny ta s cm thy c vic xy dng ng dng cho Android n gin nh th no. ng thi tm hiu v ba loi ng dng trn Android.

Tm hiu Android

| 12

Cc ci t cn thit
Trc khi bt tay vo xy dng ng dng, ta cn phi hon thnh cc ci t cn thit sau y:

Java Development Kit (JDK) Android SDK Eclipse vi ADT plug-in

Ti liu ny trnh by v cch xy dng ng dng bng Eclipse trn Windows, th nn yu cu ci t Eclipse l cn thit, tt nhin hon ton c th xy dng ng dng vi cc trnh IDE yu thch khc trn nhng h iu hnh khc, tuy nhin trong khun kh ti liu ny s khng cp n.

Ti v ci t SDK Starter Package


SDK Starter Package cha phi l mt mi trng pht trin y , n ch cha nhng phn li c bn nht ca b SDK.v cung cp mt chng trnh gip qun l{ cng nh ti v cc thnh phn khc ca b SDK. ti v v ci t, truy cp vo:
http://developer.android.com/sdk

Sau khi ci t, khi ng SDK Manager:


Start > All Programs > Android SDK Tools > SDK Manager

Tin hnh ci gi SDK chnh (phin bn mi nht l Android 3.0). Nhp vo Available packages menu bn tri, sau chn gi SDK cn ci, v nhp Install Selected.

Mn hnh ci t cc gi SDK

Tm hiu Android

| 13

Sau khi ci gi SDK xong ta s to ra mt thit b chy Android o - Android Virtual Device (AVD). AVD l mt my o vi cu hnh phn cng ty chnh, ni c th chy Android cng nh cc ng dng trn Android. Nhp vo Virtual devices menu bn tri, nhp vo New, ca s Create New AVD hin ra. G vo tn ca thit b mc Name, chng hn nh my_avd. mc Target chn mt nn tng m bn mun thit b s chy (nu bn mi va ci xong SDK Platform Android 3.0 nh bc trn th ngay ch ny chn l Android 3.0). Nhng mc khc c th mc nh. Nhp vo Create AVD. Sau khi to xong AVD s thy tn ca AVD va to xut hin trong danh sch. Nhp chn AVD sau nhp vo Start > Launch.

Mn hnh qun l cc thit b o (AVD)

Trnh gi lp (Android Emulator) s bt u chy v thit b o s boot vo Android (hi lu) nu xut hin giao din tng t nh sau th bn ci t thnh cng.

Tm hiu Android

| 14

Giao din mc nh ca AVD

Ci t ADT Plug-in cho Eclipse


Android cung cp mt plug-in cho Eclipse IDE gi l droid Development Tools (ADT). c thit k cung cp cho bn mt mi trng tch hp v mnh m trong vic xy dng cc ng dng Android. Plug-in ny m rng cc tnh nng ca Eclipse nh cho php bn to mt Android project nhanh chng, to giao din ngi dng bng cch ko th, debug ng dng s dng Android SDK, v thm ch l ng gi ng dng thnh file .APK tin cho vic phn phi v chia s, Ni chung, vic pht trin ng dng bng Eclipse vi plug-in ADT cc kz c khuyn khch v y l cch nhanh nht bt u vi Android. Trc khi ci t ADT, Eclipse phi c ci sn, nu vn cha c hy ti v v ci t ngay. Ngoi ra Android SDK Starter Package cng phi c ci trc khi ci ADT
http://www.eclipse.org/downloads

S dng chc nng qun l{ cc gi cp nht (Update Manager) trong Eclipse ci phin bn mi nht ca ADT. Khi ng Eclipse, vo menu Help > Install New Software...

Tm hiu Android

| 15

Nhp vo nt Add (gc trn bn phi) Trong ca s mi hin ln, nhp vo ADT Plugin mc Name, v nhp vo dng a ch di y mc Location. Sau nhp Ok.
https://dl-ssl.google.com/android/eclipse

Trong ca s Available Software, nhp chn vo Developer Tools sau nhp Next vi ln, v cui cng l nhp Finish. Sau khi ci t xong ADT plug-in, khi ng li Eclipse cc thay i c hiu lc.

Cu hnh ADT Plug-in


Vic cu hnh l iu bt buc ADT c th hot ng c. Trong Eclipse, vo menu Window > Preferences. Nhp chn vo Android danh mc bn tri. mc SDK Location nhp vo Browse v chn ng dn ti th mc ci t b SDK. Nhp vo Apply, sau cng l Ok.

To mi mt Android Project
Trong Eclipse, vo menu File > New > Project. Nu nh ADT plug-in c ci t thnh cng th ca s chn loi project s xut hin trng ging nh sau:

Tm hiu Android

| 16

Chn Android Project v nhp Next. in vo cc gi tr sau y: Project name: HelloAndroid Application name: Hello, Android Package name: com.example.helloandroid Create Activity: HelloAndroid Nhp Finish.

Ca s to mi mt Android Project

Tm hiu Android

| 17

Di y l gii thch c th cho mi mc:

Project Name y l Eclipse Project name - cng l tn ca th mc cha ton b file ca d n. Application Name Tn tng minh ca ng dng - tn s xut hin cng vi shortcut sau khi c ci vo thit b. Package Name y l Package Namespace (tun theo quy lut t tn package trong ngn ng Java) dng khi bn mun sp xp ton b m ngun ca mnh gn gng v tin cho vic chia s m ngun sau ny.
-------------------------------------

Package name ny bt buc khng c trng tn vi mi package c ci t trong Android; v l{ do ny nn cch t tn theo phong cch t tn min (domain-style) c khuyn khch. Nh bn trn, s dng tn com.example khi xy dng ng dng cho mnh, bn nn s dng mt tn gi nh khc.

Create Activity y l tn ca lp s c to t ng bng ADT plug-in. Lp ny c k tha t lp Activity ca Android. Mt Activity hiu n gin l mt lp dng chy ng dng, lm cc cng vic g v to giao din ngi dng.
-------------------------------------

Mc ny l ty chn, ta c th khng cn nh ADT plug-in to ra sn mt Activity bng cch b chn du check trc Create Activity. Tuy nhin Activity hu ht u c s dng trong mi ng dng thng thng.

Min SDK Version Gi tr ny ch ra yu cu ti thiu ca ng dng i vi API Level. Nh trn l 10. Build Target y l nn tng (ni cch khc l phin bn c th ca Android SKD) m Eclipse s dng chy, debug v ng gi ng dng. (mc ny s c chn t ng da vo gi tr Min SDK).
-------------------------------------

Cc ng dng trn Android u mang tnh tng thch li, tc l nu bn xy dng ng dng vi Build Target l phin bn Android 1.1 th hon ton yn tm l trn cc phin bn Android ln hn (1.5 chng hn) ng dng ca bn vn chy bnh thng. Chiu ngc li khng ng.

Tm hiu Android

| 18

Nu tt c hot ng tt, project ca bn gi y sn sng. Ta s chy th ngay by gi: vo menu Run > Run, chn Android Application. ADT plug-in s t ng lm mi vic: khi ng Android Emulator, ng gi ng dng, ci ng dng vo thit b o, sau cng l chy ng dng.
Android Emulator cn n mt vi pht khi ng, nn bn ng mt kin nhn

Bn s thy giao din ng dng Android u tin ca mnh nh sau:

Giao din ng dng Hello World

Ta s tm hiu v cu trc source code ca ng dng Android, cng nh xml layout cc chng sau

Tm hiu Android

| 19

Ba loi ng dng trong Android


Hu ht cc ng dng trong Android s thuc vo mt trong ba loi sau y:

Foreground Activity ng dng hu dng ch khi n c tng tc vi ngi dng mt tin (foreground), ng dng mt tc dng khi b n i. Game, bn , t in l cc v d in hnh. Background Service ng dng khng i hi nhiu n tng tc ca ngi dng. Tr khi c cu hnh, cn phn ln thi gian l ng dng chy ngm. V d thuc loi ny chng hn nh: ng dng tr li tin nhn t ng. Intermittent Activity ng dng loi ny va nhn tng tc ca ngi dng, v vn c th tip tc hot ng ngm khi b n i. C th a ra cc thng bo cho ngi dng khi cn thit trong lc ang b n. Cc ng dng loi ny c th k n nh: ng dng nghe nhc, ng dng tn gu (chat),

i vi cc ng dng ln v phc tp, kh c th cho vo mt loi duy nht, v thng th cc ng dng ny bao gm c khi c 3 loi trn. iu quan trng l khi bn xy dng ng dng cho mnh hy ch { n 3 loi trn a ra thit k ph hp. Di y l mt s lu { khi xy dng ng dng thuc 3 loi trn:

Foreground Activities
Khi xy dng ng dng loi ny cn phi xem xt cn thn v chu kz sng ca Activity (Activity life cycle) c th to s chuyn i thng sut v mt m gia trng thi foreground v background. V ng dng khng t n kim sot c chu kz sng, nn iu ny ng ngha vi vic bn cn phi lu li trng thi ca ng dng trc khi n chuyn t foreground sang background, v tr li trng thi ph hp trong trng hp ngc li.

Background Services
Vi ng dng loi ny, cn ch { l n s cn rt t cc tng tc trc ca ngi dng, c khi hon ton khng cn. Thay vo ng dng s lng nghe cc thng ip, s kin pht sinh bi h thng, phn cng, hoc t cc ng dng khc.

Tm hiu Android

| 20

Bn c th to ra mt ng dng hon ton v hnh, nhng tt hn l nn cung cp mt giao din c bn ngi dng c th hiu chnh cc thit lp, dng hoc thot hon ton ng dng.

Intermittent Activities
ng dng loi ny l s kt hp gia mt Foreground Activitie v mt Background Service, vy nn iu c bn l ng dng cn phi nhn bit c tnh trng hin ti ca mnh (foreground/background) a ra cc x l{ ph hp. Cng nn lu { n vic gi cc thng bo (c th thng qua h thng notification ca Android) n ngi dng khi ng dng ang chy ngm vo nhng lc cn thit.

Tm tt
Qua chng ny ta bit cch ci t cc thnh phn cn thit lp trnh vi Android, cch to mt project mi. ng thi ta cng xy dng c ng dng u tin cho mnh. Vi s tr gip ca ADT plug-in cho Eclipse, mi chuyn dng nh qu n gin. Ta cng tm hiu qua 3 loi ng dng Android c bn, cng nh mt vi lu { khi cn thit xy dng ng dng. chng sau ta s i vo tm hiu cu trc ca mt android project, cng nh i vo m x v thay i mt s th trong ng dng Hello world bn trn hiu r hn v cc class, cc quy tc khi lp trnh ng dng cho Android.

Tm hiu Android

| 21

[3]
CC THNH PHN TRONG MT NG DNG ANDROID
Trong chng ny ta s tm hiu cn k v cc thnh phn cu thnh nn mt ng dng Android, cng nh cch lin kt gia cc thnh phn thng qua Application Manifest

Tm hiu Android

| 22

Android Project
Android project l mt h thng th mc v file cha ton b source code, ti nguyn, m mc ch cui cng l ng gi thnh mt file .apk duy nht.
file c ui .apk l file ng dng ca Android

Trong mt th mc project, c mt s thnh phn (file, th mc con) c to ra mc nh, cn li phn ln th s c to ra sau nu cn trong qu trnh pht trin ng dng. Di y lit k cu trc y ca mt th mc project:

src/

Cha ton b source code (file .java hoc .aidl)


bin/

Th mc chc file Output sau khi build. y l ni bn c th tm file .apk.


gen/

Cha cc file .java to ra bi ADT plug-in, nh l file R.java hoc cc giao din to ra t file AIDL.

res/

Cha cc ti nguyn (resources) cho ng dng, chng hn nh file hnh nh, file layout, cc chui (string), Di y l cc th mc con ca n:

anim/

Cha cc file .xml dng cho vic thit lp cc hiu ng ng (animation)


color/

Cha cc file .xml dng nh ngha mu sc.


drawable/

Cha file hnh nh (png, jpeg, gif), file .xml nh ngha cch v cc loi hnh dng khc nhau (shape).

layout/ Cha file .xml dng dng giao din ngi dng. menu/

Cha file .xml quy nh application menu.


raw/

Cha cc file media, chng hn nh .mp3 hay .ogg


values/ Cha file .xml nh ngha cc gi tr. Khc vi cc resource trong cc th mc

khc, resource th mc ny khi c nh danh trong lp R th s khng s

Tm hiu Android

| 23

dng file name nh danh, m s c nh danh theo quy nh bn trong file .xml (xem thm v lp R phn sau)

xml/

Dng cha cc file .xml linh tinh khc, chng hn nh file xml quy nh app widget, search metadata,

libs/

Cha cc th vin ring.


AndroidManifest.xml/

File kim sot cch cc thnh phn trong ng dng (activity, service, intent receiver,) tng tc vi nhau, cch ng dng tng tc vi cc ng dng khc, cng nh ng k{ cc quyn hn v s dng ti nguyn trong my.

build.properties

Ty chnh cc thit lp cho h thng build, nu bn s dng Eclipse th file ny khng cn thit.

build.xml

Ch s dng khi bn dng dng lnh (command line) kin to project.


default.properties

File ny cha cc thit lp cho project, chng hn nh build target, min SDK version, tt hn ht l khng nn chnh sa file ny bng tay.

Android Manifest
Mi mt Android project th lun phi c mt file AndroidManifest.xml (xem bn trn). Manifest dng nh ngha cu trc cng nh cc metadata ca ng dng v cc thnh phn con. Manifest bt u bng th root <manifest> vi thuc tnh package quy c package ca project v thuc tnh xmlns:android nh l mt quy nh chun ha cu trc file manifest. Di y l mt file Manifest in hnh:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my_domain.my_app" > [ ... manifest nodes ... ] </manifest>

Manifest bao gm nhiu th nh ngha cc thnh phn ca ng dng, cc thit lp v bo mt, cc lp test, Di y l danh sch cc th c th xut hin trong file manifest:

Tm hiu Android

| 24

<application>

Mt file manifest ch c th cha mt th application. Th ny dng ch nh cc metadata (bao gm title, icon, theme,) v cc thnh phn cho ng dng. N ng thi cng l th cha ca cc th Activity, Service, Content Provider, v Broadcast Receiver.
<application android:icon="@drawable/icon" android:theme="@style/my_theme" android:title="@string/app_name" > [ ... application nodes ... ] </application>

<activity>

Th activity c yu cu cho mi mt Activity trong ng dng. S dng thuc tnh android:name ch nh tn ca lp Activity tng ng.
<activity android:name=".MyActivity"></activity>

<service>

Cng nh activity, th service c yu cu cho mi mt Service trong ng dng. S dng thuc tnh android:name ch nh tn ca lp Service tng ng. S dng thuc tnh android:enabled ch nh trng thi mc nh ca Service.
<service android:enabled="true" android:name=".MyService"> </service>

<uses-permission>

Quy nh cc quyn hn m ng dng mun s dng trn h thng. V ngi dng s phi xc nhn cc quyn ny trong khi ci ng dng. iu ny m bo cho vic ng dng khng th ton { s dng cc ti nguyn ca h thng (tin nhn, danh b, thng tin c nhn, camera, nh v, mng,). y l mt im bo mt cn lu {.
<uses-permission android:name="android.permission.ACCESS_LOCATION"> </uses-permission>

<instrumentation>

c yu cu cho mi mt lp Test bn to ra trong ng dng. Lp Test cung cp nhng kh nng bn c th kim tra cc Activity v Service, gim st chng v xem cch chng tng tc vi ti nguyn h thng.

Tm hiu Android

| 25

<instrumentation android:label="My Test" android:name=".MyTestClass" android:targetPackage="com.paad.aPackage" > </instrumentation>

Eclipse s t ng to ra mt file Manifest bao gm lp Activity mc nh khi bn to mi mt Android Project (xem li chng 2, mc to mi mt Android Project).

Hiu ng dng Hello world


Khi to mi mt Android Project th Eclipse s t ng to sn cho ta 1 s file, th nn nh ng dng Hello world chng 2 tuy ta cha g bt kz dng code no nhng ng dng sn sng, v khi chy xut ra mn hnh dng text Hello World, HelloAndroid .

ng dng Hello world

Tm hiu cc lp c bn c s dng
M file HelloAndroid.java trong th mc src/ bn s thy n nh sau:
package com.example.helloandroid;

import android.app.Activity; import android.os.Bundle;

public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

Tm hiu Android

| 26

setContentView(R.layout.main); } }

File ny cha lp HelloAndroid, c k tha t lp Activity. Activity l thnh phn duy nht c s dng thc hin cc hnh ng. Mt ng dng c th c nhiu Activity, tuy nhin ti mt thi im ch c duy nht mt Activity c s dng tng tc vi ngi dng. Phng thc onCreate() s c gi bi h thng khi Activity khi ng, y l ni bn nn thc hin tt c cc khi to v ci t giao din ngi dng. Mt Activity khng bt buc phi lun c mt giao din ngi dng, nhng thng thng l c. Khoan bn v cc dng lnh c to sn trong phng thc onCreate(), ngay by gi ta tin hnh sa li code i cht - ch { nhng ch in m - nh sau:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello, Android"); setContentView(tv); }

Mt giao din ngi dng l tp hp ca cc thnh phn View. Mt View l mt lp c th v (v ra hnh dng ca chnh n) nh button, image, hoc text label (c dng trong trng hp ny). Cc thnh phn view th u c k tha t lp View, nh bn trn th l lp TextView (k tha t lp View). Trong on code bn va thay i, bn to ra mt TextView - ch chp nhn tham s truyn vo phng thc khi to l mt th hin (instance) ca lp Context. Mt Context l mt handle ti h thng, n cung cp cc dch v lin quan ti h thng, x l{ ti nguyn,... Lp Activity c k tha t lp Context, v bi v lp HelloAndroid ca bn li c k tha t lp Activity, nn tt nhin n l mt Context. Cho nn bn truyn vo phng thc khi to ca TextView tham s this vn c chp nhn, this y chnh l mt tham chiu ca Context trong ng dng ca bn. Tip theo bn quy nh ni dung cho TextView to ra bng phng thc setText().

Tm hiu Android

| 27

Cui cng bn yu cu ng dng hin th TextView to ra mn hnh bng phng thc setContentView() vi tham s truyn vo phi l mt th hin ca View. Nu nh bn khng h s dng phng thc setContentView() th giao din ngi dng ca ng dng s ch ton l mt mu en. Tin hnh chy th ng dng sau khi sa code, bn s thy mt giao din khc vi ban u nh sau:

ng dng Hello world sau khi sa

Nh bn thy, ng dng c 2 dng text. Dng u tin l thanh tiu ca ng dng, dng th hai l dng text do TextView ca ta to ra. Chui Hello, Android trn thanh tiu c Eclipse to ra t ng, v ni dung ca chui c nh ngha trong file res/values/strings.xml, chui c s dng nh l tiu ca ng dng c quy nh trong file AndroidManifest.xml (xem bn trn - mc Android Manifest).

Xy dng giao din vi XML Layout


Sau khi sa li code trong phng thc onCreate() ta tm hiu c v cc lp c bn trong mt ng dng Android cng nh cch xy dng giao din trc tip bng m lnh hay cn gi l "programmatic" UI layout. Nhng vi cch tip cn ny c nhng nhc im nht nh: sa i giao din kh khn, d pht sinh li trong nhng on m lm giao din, l l{ do ti sao Android cung cp mt cch n gin hn xy dng giao din: da hon ton trn XML. M file main.xml trong th mc res/layout/ bn s thy n nh sau:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/hello" />

Tm hiu Android file main.xml ny c Eclipse to ra t ng khi bn to 1 project mi

| 28

Cu trc ca mt file layout rt n gin: n l mt vn bn XML vi mi node l tn ca mt lp View (mi mi thnh phn giao din phi l mt View - xem trn), tt nhin bn hon ton c th s dng tn ca mt lp bt kz min sao n c k tha t lp View. Cu trc ny lm cho vic to giao din tr nn n gin hn rt nhiu so vi "programmatic" UI layout, cng ging phn no vi cu trc ca html. ng thi m hnh ny cho php ng dng ca bn tch bch gia phn trnh by (giao din) vi phn code x l{ bn di. Trong file main.xml bn trn, ch c mt View c s dng: TextView, vi vi thuc tnh. Di y l gii thch cho mi thuc tnh:

xmlns:android

Khai bo cho cho trnh bin dch ni nh ngha cc thuc tnh ca th xml. Cc th ngoi cng trong mi file layout u cn phi c thuc tnh ny, cc th khc khng cn phi c.

android:id

Thuc tnh ny ch nh mt ID duy nht trong ton b ng dng cho phn t View ny ( y l TextView). Sau bn c th dng ID ny tham chiu ti View ny t source code hoc t cc file xml khc. Trong trng hp ny, ID c ch nh l "textview"

android:layout_width

Ch nh chiu rng cho phn t khi hin th. Trong trng hp ny, ch c duy nht mt View cho nn bn mun n chim ton mn hnh, v gi tr "fill_parent" c s dng.

android:layout_height

Ging nh layout_width, ch khc l thuc tnh ny ch nh chiu cao.


android:text

Ch nh chui ni dung cho TextView. Trong trng hp ny, bn s dng mt string resource thay v s dng mt chui c th. String resource y ( hello) c nh ngha trong file res/values/strings.xml. S dng string resource c khuyn khch hn l s dng mt chui c th, v n s gip cho vic sa i ni dung d dng m khng cn ng n file layout. ng dng ca vic ny l xy dng cc ng dng a ngn ng. Gi ta s sa i cht string resource, ng dng Hello world chy khc so vi ban u. M file strings.xml trong th mc res/values/ bn s thy n nh sau:

Tm hiu Android

| 29

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, HelloAndroid!</string> <string name="app_name">Hello, Android</string> </resources>

y l file cha ton b nh ngha cc chui c s dng trong ng dng. Bn sa li nh sau: (dng in m)
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hellooooooooooooo</string> <string name="app_name">Hello Hello Hello </string> </resources>

Quay li file HelloAndroid.java , sa li trong phng thc onCreate() nh sau:


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

Thay v truyn vo phng thc setContentView() mt th hin ca View nh trnh by phn trn, ln ny ta truyn vo mt tham chiu ti mt resource l main layout bng cch s dng lp R. Eclipse t ng to ra lp R ny bn trong file R.java, dng tham chiu ti mi ngun resource c trong th mc res/. Ch { khng bao gi c sa file R.java ny bng tay. Chy th ng dng, bn s thy giao din thay i:

ng dng Hello world sau khi sa ln hai

Tm hiu Android

| 30

Tm tt
Kt thc chng ny ta nm r hn v cc thnh phn trong mt ng dng Android cng nh c khi nim v vi lp c bn (Context, Activity, View, TextView). Ta cng bit v XML Layout, nguyn tc khi xy dng file layout, ng thi bit v cc thuc tnh ca th TextView s dng trong layout nh th no. Ta cng tm hiu s qua string resource, v lm th no s dng c string resource t file xml layout. cc chng tip theo ta s i vo ni r v tng thnh phn mt.

Tm hiu Android

| 31

[4]
ACTIVITY
Trong chng ny ta s tm hiu k v lp activity, mt lp quan trng trong ng dng Android.

Tm hiu Android

| 32

Activity l thnh phn ng dng cung cp mt mn hnh tng tc cho ngi s dng nhm thc hin mt thao tc no chng hn nh gi in thoi, chp nh, gi email hay xem bn . Mi activity chy trong mt ca s hin th trn giao din ca ngi s dng. Ca s c th hin th ton mn hnh hoc nh hn mn hnh v ni pha trn cc ca s khc. Mt ng dng thng bao gm nhiu activitiy lin kt vi nhau. Thng thng thng mt activity ca ng dng ng vai tr activity chnh v c hin th cho ngi s dng trong ln u tin chy ng dng. Mi activity c th khi chy mt activity khc. Mi ln mt activity mi c khi ng th activity trc s b dng li nhng h thng vn sp n vo stack (tn l Back stack). Khi mt activity mi khi ng, n c xp pha trn cng trong khi stack v c focus. Back stack hot ng theo trnh t vo sau, ra trc, cho nn khi ngi s dng thao tc xong vi activity hin ti v nhn BACK, chng trnh s pop ra t stack activity lin trc v activity s tip tc hot ng tr li. C nhiu phng thc callback m mt activity c th nhn c khi c s thay i trng thi (khi to, dng, resume hoc hy) v bn c th thc hin mt thao tc tng ng vi s thay i trng thi. Chng hn khi b dng li th activity s phi gii phng b nh, ng truy cp database, Khi c khi ng li bn c th truy cp nhng d liu cn thit v resume cc thao tc b gin on trc . Nhng s chuyn i v trng thi ny hp thnh vng i ca mt activity.

To mt Activity
to mt activity, bn phi to mt subclass cho Activity (hoc cho chnh n). Trong subclass, bn cn phi xc nh cch thc callback m h thng s s dng khi c s chuyn i trng thi ca activity chng hn nh khi activity c to, dng li, resume hoc b hy. C 2 phng thc callback quan trng:

onCreate()

Bn cn phi hin thc ha phng thc ny, v h thng s gi ti method ny mi khi activity c khi ng. V quan trng, y chnh l ni cn gi phng thc setContentView() xc nh b cc cho giao din ngi dng.

onPause()

H thng s gi ti phng thc ny khi ngi dng ri khi ng dng (n khng ng ngha vi vic activity s b hy). y l ni bn s thc hin lu li trng thi, hoc khng lm g c (v ngi dng c th khng tr li).

Tm hiu Android

| 33

C mt s phng thc bn c th s dng kim sot vng i ca activity trc nhng s gin on khng mong mun dn n activity b dng li, thm ch b hy b. Nhng phng thc ny s c ni ti trong phn Kim sot vng i Activity

Trin khai mt giao din ngi dng


Mi giao din ca mt activity l tp hp ca cc View (cc i tng ca lp k tha t lp View). Mi i tng View kim sot mt vng ring trong vng mn hnh v c th phn ng li vi tng tc ca ngi dng. V d View c th l mt button v c th thc hin mt hnh ng no khi ngi dng chm vo n. Android cung cp mt s cc lp View sn bn c th s dng vo layout ca mnh. Widget l mt view c bit, dng hin th ngoi mn hnh chnh, bao gm: button, text field, checkbox, hoc n gin ch l image. Layout l view k tha t ViewGroup, n cung cp mt khun mu cch b tr cc view bn trong n, chng hn nh: linear layout, grid layout, relative layout. Bn c th to cho ring mnh cc View hay ViewGroup p dng vo giao din ca bn. Cch thng thng nht nh ngha mt layout l s dng file XML lu trong th mc resource ca ng dng. Vi cch ny bn c th duy tr thit k giao din tch bch vi source code. Bn c th set layout ny lm giao din ca activity bng phng thc setContentView(), truyn vo tham s l ID ca layout thng qua lp R. Tt nhin bn cng c th to giao din trc tip bng code.
Xem thm v to giao din ngi dng chng sau

Khai bo Activity trong file Manifest


Bn cn phi khai bo r rng mt activity trong file manifest th activity mi c th hot ng c. khai bo Activity ta dng th <activity> l th con ca <application>. Tng t nh sau:
<manifest ... > <application ... > <activity android:name=".ExampleActivity" /> ... </application> </manifest>

Tm hiu Android

| 34

C nhiu thuc tnh bn c th a vo <activity> chng hn nh: label, icon, hay theme. Xem thm ti
http://developer.android.com/guide/topics/manifest/activity-element.html

S dng intent filters Mt th <activity> c th cha ng nhiu th <intent-filter>. Th ny dng xc nh nhng thnh phn no ca ng dng c th kch hot, v s dng Activity ny.
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

Th <action> ch nh y l Activity chnh ca ng dng (s c chy mc nh). Th <category> ch nh Activity ny s c lit k trong danh sch ng dng ca h thng ( ngi dng c th chy activity ny). Nu bn mun ng dng ca bn bo mt v khng cho php bt c ng dng no khc c th kch hot Activity ny th bn khng cn thm bt kz <intent-filter> no na, ch cn nh trn l . Khi bn to mt Android Project mi th Eclipse t nh ra khai bo Activity vi Intent-filter nh trn.

Bt u mt Activity
Bn c th bt u mt Activity khc trong activity ang chy bng phng thc startActivity(), truyn vo tham s l mt Intent quy nh r Activity no bn mun bt u v s thc hin hnh ng c th no (h thng s chn ra Activity chnh xc cho bn, n c th thuc mt ng dng khc). V d sau y bt u mt Activity c tn SingInActivity:
Intent intent = new Intent(this, SignInActivity.class); startActivity(intent);

Tm hiu Android

| 35

Tuy nhin ng dng ca bn khi mun bt u mt Activity m ng dng khng c sn, chng hn nh gi email, sms, gi in, Trong trng hp ny ng dng s cn gi n cc Activity c cung cp sn trn h thng, y l mt im rt hu ch ca Android. V d bn cn thc hin thao tc gi email, bn lm nh sau:
Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);

Khi thc hin on m ny th Activity gi email ca h thng s khi ng, Activity ca bn s n i. Sau khi ngi dng gi email xong, Activity ca bn s c resume.

Bt u mt Activity v kt qu tr v
i khi bn mun nhn c kt qu tr v sau khi chy mt Activity no . Trong trng hp ny, bn s dng phng thc startActivityForResult() thay v startActivity(), sau nhn c kt qu tr v Activity k tip, bn s dng phng thc onActivityResult(). Kt qu c truyn i l mt Intent. Nh v d sau, bn bt u mt Activity cho php chn mt s trong danh b, sau nhn kt qu ti Activity ca mnh:
private void pickContact() { Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST); }

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // code x l } }

Xem thm v lp Intent hiu cch kt qu c truyn i gia cc Activity ti


http://developer.android.com/guide/topics/intents/intents-filters.html

Tm hiu Android

| 36

Kt thc mt Activity
Bn c th kt thc mt Activity bng cch gi phng thc finish(). Bn cng c th kt thc mt Activity ring bit m trc bn khi ng bng phng thc finishActivity().
Ch : trong hu ht trng hp bn khng nn dng cch ny kt thc mt Activity, v h thng Android s lm nhim v ny cho bn. Khi dng cch ny cng c th s nh hng n tri nghim ca ngi dng khi tng tc vi ng dng.

Kim sot vng i Activity


Vic kim sot ny rt quan trng c th xy dng c mt ng dng linh hot v mnh m. Mt Activity c th tn ti ba trng thi c bn sau:

Resumed Khi Activity ang trong foreground hoc c focus (trng thi ny cng c th c gi l "running"). Paused Khi Activity mc d ang trong foreground, tuy nhin vn ang b n. Ti v c mt Activity khc ang c kch hot v nm trn cng nh l: menu, message box, Tt nhin lc ny Activity ang paused vn cn sng (activity vn cn c lu trong b nh) tuy nhin activity ny c th b kt thc bi h thng khi b nh cn kit. Stopped Khi Activity hon ton b che i bi mt Activity khc (hay ni cch khc l Activity ny ang nm trong background). Mt Stopped Activity th vn cn sng, tuy nhin n khng cn hin th cho ngi dng s dng v c th b kt thc bt c lc no bi h thng.

Cc phng thc tng ng trong vng i Activity


Vng i ca mt Activity khng phi do Activity kim sot, m n s do h thng kim sot, v trong lc thc thi activity, s c nhng tnh hung xy ra bt ng nh hng n Activity. ng vi mi hnh hung xy ra, h thng s c mt li gi tng ng kiu nh sau:

Tm hiu Android

| 37

public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Code x l } @Override protected void onStart() { super.onStart(); // Code x l } @Override protected void onDestroy() { super.onDestroy(); // Code x l } // v cn cc phng thc khc }

Di y l danh sch cc phng thc c th c gi cng vi gii thch c th:

onCreate()

Gi khi Activity ln u tin c to. y l ni bn thc hin mi cc khai bo cng nh thit lp giao din. Lun c theo sau bi phng thc onStart().

onRestart()

Gi khi Activity ang trng thi Stopped v c kch hot li. Lun c theo sau bi phng thc onStart().

onStart()

Gi khi Activity restart v sn sng, nhng cha cha hin ra vi ngi dng. c theo sau bi phng thc onResume() nu Activity i ra foreground, hoc onStop() nu n n i.

onResume()

Ch c gi khi Activity bt u cc tng tc vi ngi dng. Lun c theo sau bi phng thc onPause().

Tm hiu Android

| 38

onPause()

Gi trc khi Activity bt u vo trng thi paused. Trong phng thc ny ta thng s gii phng b nh, hoc dng cc hnh ng no c th chim dng nhiu ram, cpu cho Activity c kch hot tip theo lm vic trn tru. Theo sau bi phng thc onResume() nu Activity c kch hot li (quay v foreground), hoc onStop() nu n n i.

onStop()

Gi khi Activity khng cn c s dng na. N c th s b hy b, hoc c th s li c kch hot li t mt Activity khc Theo sau bi onRestart() nu n c kch hot li, hoc onDestroy() nu n b hy b bi h thng.

onDestroy()

Gi trc khi Activity tht s b hy b, y l li gi cui cng m Activity c th thc hin. Phng thc ny c th c gi bi v u c li gi finish() hoc finishActivity(), cng c th v h thng cn phi hy b gii phng b nh. Khng c theo sau bi phng thc no.

Tm tt
Trong chng ny ta tm hiu v Activity trong ng dng Android - mt thnh phn rt quan trng. Ta cng tm hiu v cch khai bo Activity trong file Manifest, cch bt u chy mt Activity, cng nh cch kim sot vng i ca Activity chng sau ta s tip tc ni v mt thnh phn khc cng quan trng khng km.

S minh ha vng i Activity

Tm hiu Android

| 39

[10]
XY DNG GAME TOUCH THE BALL
Trong chng cui ny ta s vn dng cc kin thc tm hiu xy dng nn mt game n gin.

Tm hiu Android

| 40

Mc tiu
Mc tiu trong chng ny l ta s xy dng c mt game c giao din nh sau:

Giao din va vo game

Giao din trong lc chi

Giao din ht thi gian

V cch chi: va vo game ngi chi s thy giao din nh hnh u tin, sau khi chm vo mn hnh game s bt u. Bt u game s xut hin cc qu bng nhiu mu sc bay qua li trn mn hnh. C mi thi im s c yu cu ngu nhin v mt mu sc bt kz (thanh mu trn cng - hnh gia). Ngi chi c nhim v chm vo nhng qu bng c mu c yu cu. im s c tnh nh sau: chm vo qu bng ng mu c cng im, sai mu b tr im, qu bng cng nh th im s cng ln. Khi chm vo qu bng ng mu th qu bng y s bin mt, ng thi s xut hin thm 3 qu bng khc thay th, c vy lng bng s ngy cng nhiu ln. Game s kt thc sau 30 giy, v xut hin mn hnh nh hnh th ba.

nh hng
Trc khi bt tay vo lm ta nn tm hiu cch xy dng mt game, cng nh ra gii php c th xy dng game trn Android m c th l game ny. Game l mt ng dng nh cc ng dng khc nhng ch c mt im cn lu { l: mt game thng thng s i hi mn hnh refresh li lin tc trong mt khong thi gian ngn ( to ra cc chuyn ng). S sau s gip d hnh dung vng tun hon ca mt game:

Tm hiu Android

| 41

Tng tc ca ngi chi

Bt u

V mi th ra mn hnh (ta , kch thc, mu sc,...)

X l{ lu li cc thay i (ta , kch thc, mu sc,...)

Vng tun hon ca mt game thng thng

Game trn Android: Android c h tr th vin ha 2D, 3D da trn OpenGL ES gip cho vic pht trin game d dng, t cc mini game n cc game ln. Tuy nhin trong ti liu ny ta s khng tm hiu su v OpenGL, ta s ch s dng cc hm v n gin trn canvas thc hin game touch the ball.

Xy dng lp c bn
Trc tin ta s to mt Project mi vi cc thng s sau: Project name: TouchTheBall Application name: Touch The Ball Package name: com.example.touchtheball Create Activity: MainActivity

AnimationView.java
Tip theo ta s to ra mt lp mi k tha t View. Lp ny c trch nhim hin th ton b hnh nh ca game v nhn cc s kin x l{.
class AnimationView extends SurfaceView { public AnimationView(Context context, AttributeSet attrs) { super(context, attrs); }

@Override public boolean onTouchEvent(MotionEvent event){ return super.onTouchEvent(event); }

Tm hiu Android

| 42

Phng thc on TouceEvent() c override li t lp cha. Phng thc ny l ni t cc on code x l{ s kin. V lp AnimationView mi to ra l mt View cho nn ta c th xem n nh l mt th (xml tag) v c th a n trc tip vo file layout ca ng dng (xem cc chng trn). M file main.xml trong th mc res/layout/ v sa li nh sau:
<?xml version="1.0" encoding="utf-8"?> <com.example.touchtheball.AnimationView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"/>

Nh vy gi khi MainActivity c chy, trn mn hnh ch c duy nht mt thnh phn l AnimationView, AnimatinoView ny hin th ton m hnh v s v ra ton b hnh nh trong game. Bng cch ny ta khng phi sa bt kz mt dng code no trong file MainActivity.java, ch nh mc nh Eclipse to sn, v by gi mi vic x l{ trong game c lp AnimationView m nhim.

AnimationThread.java
Xem li vng tun hon ca mt game, ta thy c s lp li v tn ca cng vic v v tnh ton cc s liu. iu ny i hi phi c mt s x l{ a tin trnh, mt tin trnh lm nhim v tnh ton v v, mt tin trnh khc lm nhim v ch cc s kin xy ra (c th trong game l s kin touch mn hnh) x l{. Bn trn ta to ra lp AnimationView hin th hnh nh, v cng x l{ s kin, tuy nhin nh th th cha th chy a tin trnh, gi ta s to ra mt lp mi c nhim v m nhim x l{ v hin th hnh nh thay cho lp AnimationView. Nhng cn lu { rng ta ch t duy nht mt th <AnimationView> vo file XML Layout, cho nn bt kz lp no mun hin th hnh nh ln mn hnh th u phi thng qua tham chiu ti AnimationView.
class AnimationThread extends Thread { // Bin kim sot vic lp

Tm hiu Android

| 43

private boolean mRun = true; // Bin tham chiu ti AnimationView dng hin th ra mn hnh private SurfaceHolder mSurfaceHolder; public AnimationThread(SurfaceHolder surfaceHolder) { this.mSurfaceHolder = surfaceHolder; } public void stop(){ this.mRun = false; } @Override public void run(){ while(this.mRun){ Canvas canvas = this.mSurfaceHolder.lockCanvas(null); // xa mi hnh nh trc bng cch t mu trng canvas.drawColor(Color.WHITE); // tip tc gi cc hm v khc... } } public void doTouch(MotionEvent event){ if(event.getAction() == MotionEvent.ACTION_DOWN){ // thc hin cc hm tnh ton... } } }

Trong lp AnimationThread va to c 3 phng thc quan trng cn ch {.

run()

Phng thc ny lm nhim v hin th cc hnh nh ra mn hnh. Trong phng thc ny mt vng lp while() c s dng duy tr qu trnh tun hon (v i v li).

stop()

Phng thc ny dng khi mun dng vng lp while() phng thc run().
doTouch()

Phng thc ny lm nhim v x l{ khi c s kin xy ra.

Tm hiu Android

| 44

Theo nh thit k lp AnimationThread trn th phng thc doTouch() dng x l{ s kin, nhng lu { lp AnimationThread khng lm nhim v ch s kin xy ra. Theo nh phn tch trn v vn a tin trnh: AnimationThread gi y s lm nhim v hin th hnh nh, AnimationView s lm nhim v ch s kin. Nhng mi khi c mt s kin xy ra AnimationView s khng trc tip x l{ m s gi li phng thc doTouch() ca AnimationThread x l{. Phng thc khi to AnimationThread() cn mt SurfaceHolder tham chiu ti vng canvas cn v, v tham s ny s c ly t AnimationView. Ta cn thay i lp AnimationView mt cht: (nhng dng in m mi c thm vo)
class AnimationView extends SurfaceView { private AnimationThread thread; public AnimationView(Context context, AttributeSet attrs) { super(context, attrs); SurfaceHolder holder = this.getHolder(); holder.addCallback(this); this.thread = new AnimationThread(holder); }

@Override public boolean onTouchEvent(MotionEvent event){ thread.doTouch(event); return super.onTouchEvent(event); } }

Nh vy gi ta gii quyt c vn ct li nht c th xy dng mt game n gin.

Xy dng lp Ball
Cng vic tip theo l xy dng lp Ball. Theo nh tinh thn hng i tng th trong game, mi qu bng s l mt i tng ring bit. Nh vy ta cn i xy dng mt lp nh ngha th no l mt qu bng, ng thi lp ny kim lun nhim v

Tm hiu Android

| 45

v qu bng (v chnh n) ra mn hnh cng nh kim tra ta (s c s dng trong doTouch()). Lp Ball c thit k nh sau:
public class Ball { public Ball(Canvas c){} public void draw(Canvas c, Paint p){} public void update(Canvas c){} public Boolean check(int x, int y){} public Boolean checkColor(int color){} public int score(){} }

Gii thch cc phng thc trong lp Ball:

Ball()

Phng thc khi to. To mt qu bng vi mu sc, kch thc, v tr, hng di chuyn v tc ngu nhin. Phng thc ny cn truyn vo tham s l mt Canvas bi v khi to mi mt qu bng, ta ca qu bng s c xc nh ngu nhin, nhng vn cn phi nm trong vng mn hnh nn ta cn truyn vo Canvas hin ti xc nh kch thc ca Canvas , t xc nh ta cho qu bng.

draw()

Phng thc ny dng v qu bng ra mn hnh, tham s cn truyn vo l Canvas c s dng v hnh ln, v mt bt v (Paint) hin ti. Phng thc ny s c gi bi phng thc run() trong lp AnimationThread.

update()

Phng thc ny s xc nh li ta mi cho qu bng, nh phng thc ny qu bng mi c th bay qua li trn mn hnh theo mt qu o nht nh. Phng thc ny cn truyn vo mt Canvas, mc ch l xc nh kch thc mn hnh nh phng thc khi to.

check()

Phng thc ny tr v mt gi tr Boolean , c dng kim tra ta truyn vo (x, y) c nm trong qu bng hay khng. c gi bi phng thc doTouch() trong lp AnimationThread.

checkColor()

Phng thc ny tr v mt gi tr Boolean, dng kim tra mu truyn vo (color) c ging vi mu hin ti ca qu bng hay khng. c gi bi phng

Tm hiu Android

| 46

thc doTouch() trong lp AnimationThread.

score()

Phng thc ny tr v mt s kiu Int, dng xc nh lng im s tng ng vi kch thc qu bng. Bn knh cng nh th lng im cng ln.

S dng lp Ball
Sau khi xy dng xong lp Ball, ta tin hnh thm vo code lp AnimationThread ti mt s ch. u tin l thm vo vi thuc tnh private:
// Bt v private Paint mPaint; // Mu hin ti private int currentColor; // Mng lu cc qu bng private ArrayList<Ball> balls; private int maxball = 15;

Tip theo l thm vo phng thc khi to on code khi to bt v v to mt mng cc qu bng:
public AnimationThread(SurfaceHolder surfaceHolder) { this.mSurfaceHolder = surfaceHolder; // khi to bt v this.mPaint = new Paint(); this.mPaint.setAntiAlias(true); this.mPaint.setARGB(255,255,255,255); // khi to cc qu bng Canvas canvas = this.mSurfaceHolder.lockCanvas(null); for(int i=0; i<this.maxball; i++) this.balls.add(new Ball(canvas)); }

Tip theo l thm vo trong phng thc run() nhng dng c in m:

Tm hiu Android

| 47

public void run(){ while(this.mRun){ Canvas canvas = this.mSurfaceHolder.lockCanvas(null); // xa mi hnh nh trc bng cch t mu trng canvas.drawColor(Color.WHITE); for(int i=0;i<this.balls.size();i++){ // di chuyn qu bng sang v tr mi, sau l v this.balls.get(i).update(canvas); this.balls.get(i).draw(canvas, this.mPaint); } } }

Ti y ta chy th game, cc qu bng xut hin v bay qua li trn mn hnh.

X l s kin
Bc tip theo ta s thm on code x l{ s kin khi ngi chi chm vo mn hnh, ta s kim tra coi ngi chi c chm vo qu bng no khng (nu c nhiu qu bng nm ln nhau, u tin chn qu bng nm bn trn). Nu c chm vo mt qu bng th ta s tip tc kim tra mu ca qu bng vi mu yu cu hin ti c khp vi nhau khng. Ta thm vo trong phng thc doTouch() nhng dng c in m:
public void doTouch(MotionEvent event){ if(event.getAction() == MotionEvent.ACTION_DOWN){ int x = (int)event.getX(); int y = (int)event.getY(); int index = -1; // v u tin nhng qu bng trn nn ta s dng vng lp ngc // v khi v cc qu bng ta dng vng lp xui // nn cc qu bng sau s c v ln trn for(int i=this.balls.size()-1; i>=0; i--) if(this.balls.get(i).check(x, y)){ index = i;

Tm hiu Android

| 48

break; } if(index != -1){ if(this.balls.get(index).checkColor(this.currentColor)){ // code x l nu qu bng ng mu } } } }

Nh vy l ta c bn xy dng c game. game c th chi c nh nhng hnh minh ha ban u ta cn cn phi code thm na. c th hin ra im s khi chm vo cc qu bng (hiu ng im hin ra v bin mt t t) ta cn phi code thm lp TextScore. Tuy nhin bi vit ch nhm mc ch gi m nhng nguyn tc, nhng lp c bn ban u nn xin dng li ti y. Source code hon chnh ca game Touch The Ball c th download ti
http://download.tuzebra.com/android-touchtheball.zip

Kt thc
Trong chng cui ny ta cng i xy dng game n gin, y nh l bi thc hnh vn dng cc kin thc m ta tm hiu trong sut ti liu. ng thi bit thm cch mt game thng thng hot ng nh th no. tm hiu su hn v Android, cch tt nht l c ti liu t chnh trang ch ti
http://developer.android.com

You might also like