i sidste androide forelæsning, vi har dækket ved hjælp af en tråd til at gøre et lærred i androide.i denne forelæsning, og vi vil bygge videre på denne kodeks til at håndtere touch screen - begivenheder, og navnlig til at flytte den drivende boble rundt skærmen på brugeren at røre ved skærmen.,, når noget koordinere baseret på en androide, det er klogt at kontrollere oprindelsen og retning i koordinatsystemet, før du starter.ikke alle af dem bruger den samme opstilling!i dette tilfælde er det dog skærmen koordinater er den samme som standard 2d koordinater: oprindelsen er i øverste venstre hjørne, med x - aksen løber rightwards, og y - aksen, løber nedad.det betyder, at vi kan bruge den rører ved koordinater direkte som skærm koordinater, uden omdannelse.(dette er ikke tilfældet, hvis du bruger opengl.), med tilføjelse af touchevent behandling til den holdning, vi bruger den samme opfattelse som sidste gang, bubblesurfaceview.det eneste, vi skal gøre, er at tilføje en, ontouchevent(), metode:,, offentlige klasse bubblesurfaceview udvider surfaceview gennemfører surfaceholder. callback {offentlige boolean ontouchevent (motionevent e) {flyde touchx = f. getx(); flyde nærtagende = f. gety(); kontakt (f. getaction()) (sag motionevent.action_down: tråd. setbubble (touchx, nærtagende); pause.} tilbage.},,, ontouchevent(), er en del af surfaceview spec, så motionevent oplysninger automatisk vil blive vedtaget i deres surfaceview.alt du skal gøre er at skrive en metode til at håndtere det.med en enkelt sag, for her er der ikke noget reelt behov for at skabe det, touchx og følsom, værdier (du kan bruge, f. getx() og e. gety() direkte); men det er god praksis at anvende disse værdier for at lette vedligeholdelse som din kode, bliver mere kompliceret, denne kode. reagerer på en, action_down, begivenhed (og kun i det tilfælde), når brugeren sætter fingeren på skærmen.da (jf. sidste lektion i) den faktiske trække på vores lærred håndteres af en uafhængig tråd, skal vi vedtage den kontakt oplysninger i bubblethread., bubblethread. setbubble(), er ligetil:,, klasse bubblethread udvider tråd (beskyttede tomrum setbubble (float - x, flyde y) (bubblex = x; bubbley = y.},,, bubblex, og bubbley, hold den centrale koordinater for vores boble.som den, run(), metode i denne tråd er konstant at ændre på skærmen, når boblen er koordinaterne er nulstillet, der skal tegnes på den nye placering.,, udarbejde kodeksen og køre det på din telefon til at se den boble under tegnes, hvor du røre ved skærmen (og så flyder fra den position, som i kode fra den sidste lektion).,, håndtering af andre forslag begivenheder, vi nemt kan ændre denne klare, action_up i stedet; bare erstatte, action_up, for action_down i ovennævnte kode, samle og flygt, og du vil se, at den boble bevæger sig kun holdning, når du løfte din finger.,, hvad med, action_move,?kan vi ændre denne metode til at gøre den boble følge din finger, som trækker du det på skærmen?api - gør dette for meget straighforward.edit, ontouchevent(), til at se sådan ud:,, offentlige boolean ontouchevent (motionevent e) {flyde touchx = f. getx(); flyde nærtagende = f. gety(); kontakt (f. getaction()) (sag motionevent.action_down: tråd. setbubble (touchx, nærtagende); pause, sag motionevent.action_move: tråd. setbubble (touchx, nærtagende); pause; sag motionevent.action_up: tråd. setbubble (touchx, nærtagende); pause.} tilbage.},,, action_move, er en konstant tilbage hver gang, der sker en ændring i en gestus, dvs. mellem en, action_down, og action_up, begivenhed.så hver gang du flytter fingeren lidt på skærmen, en motionevent er vendt tilbage, og vi kan få koordinaterne for din finger er nye holdning og ændre boble placering i tegne tråd.når tilfælde er over (en, action_up, tilfælde sker), vi holder op med at sende nye boble steder, og her går tilbage til flydende.,, der er et stort antal andre motionevents, for, som alle er beskrevet i motionevent api - grænseflade.som du kan se, kan du også få oplysninger om røre begivenheder.her er et kort eksempel på, hvordan man kan få den tid, som en række røre begivenheder har fundet igen ved redigering, ontouchevent():,, offentlige boolean ontouchevent (motionevent e) (//få touchx og følsom kontakt (f. getaction()) (//....andre sager...sag motionevent.action_up: tråd. setbubble (touchx, nærtagende); flydende totaltime = f. geteventtime() - f. getdowntime(). skål. maketext (ctx, "rør i fru var" + totaltime, skål. length_short). show(); pause.} tilbage.},,, getdowntime(), returnerer den tid (i millisekunder) det rør, der startede denne kæde af forslag begivenheder., geteventtime(), returnerer den tid (i millisekunder) i det nuværende forslag.her, så kan vi få det tidsrum, for hvilket der bruger finger trak den boble omkring skærmen (tiden mellem det første ned hændelse, og den nuværende op tilfælde), og far en skål budskab til sig,.,,,,, og endelig en hurtig, praktisk bemærkning om gevindskæring.det er muligt, hvis tegning til gulvet tager enhver betydelig tid, til at starte, run(), metode, mens den tråd er stadig i gang, og forsøge at gøre lærredet, efter at det er blevet stoppet, således at kaste en fejl.jo mere kompliceret dit kodeks bliver, desto mere sandsynligt er det, at det vil ske.for at undgå dette, tilføje, at kontrollere, dodraw():,, private tomrum dodraw (lærred lærred) (hvis (er) (lærred. restore(); lærred. drawcolor (farve, sort); lærred. drawcircle (bubblex, bubbley, 50, maling)), er i stand til at reagere på forslag og ved begivenheder, er en væsentlig del af at de androide api - og der er en række komplekse oplysninger til rådighed om røre begivenheder, for at man kan få mest muligt ud af dem.lege med oplysninger fra de api - for at se, hvad du ellers kan få den boble, eller hvad du kan gøre med det.i den næste forelæsning, vil vi se flere rør begivenheder: under mere end én finger på skærmen.