- androiden anvendelse udvikling tutor: hvordan flere rør

i sidste androide forelæsning, så vi på at håndtere en trykfølsomme skærm begivenhed.det er kun behandlet en enkelt indikator, selv om.robotter kan klare flere oplysninger på samme tid, som afspejler, hvad der sker, når du har mere end én finger på skærmen på samme tid.dette er, hvordan flere rør bevægelser (som pinch zoom) arbejde,.,,,,, kan vi se, at flere oplysninger ved at påvise en androide insekt i sidste lektion i kode.løb bubblemove app fra den sidste forelæsning, og begynde at trække boble på skærmen.hvis du sætter en anden finger på den første film mens du gør det, så løfter de første finger, boblen springer hen over skærmen til anden finger placering.det er, fordi den kode, som det ser ud for øjeblikket behandler kun misligholdelse pointer.første finger ned er misligholdelse pointer. men når det er taget af skærmen, den anden finger (som den eneste point), bliver automatisk og boblen springer over denne nye standard pointer.lad os se på, hvordan vi skal håndtere flere retningslinjer udtrykkeligt.,, en hurtig bemærkning: desværre har forsøgsstøtte til flere emulator kun røre.for at følge med i denne forelæsning, du bliver nødt til at få dit udstyr til prøvning, eller forsøg med tilkoblet udstyr mulighed på det foregående led.,, håndtering af flere tips: de grundlæggende spørgsmål, vi starter vores rejse ind i multi - røre ved håndtering af fastsættelse af, at flere point insekt.for at gøre dette skal vi tage hensyn til i vores point, id - kode.,, kun en del af koden for den sidste lektion, som vi er nødt til at ændre, ontouchevent(),.redigere det lignede den (med yderligere et par private klasse variabler):,, menig static /int invalid_pointer_id = - 1; private int activepointer = invalid_pointer_id; offentlige boolean ontouchevent (motionevent e) (kontakt (f. getactionmasked()) (sag motionevent.action_down: tråd. setbubble (f. getx(), f. gety()); activepointer = e.getpointerid (0); pause, sag motionevent.action_move: hvis (activepointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (activepointer); tråd. setbubble (e.getx (pointerindex), e.gety (pointerindex)} pause, sag motionevent.action_up: hvis (activepointer!= invalid_pointer_id) (showtotaltime (f. geteventtime() - f. getdowntime()); activepointer = invalid_pointer_id;} pause, sag motionevent.action_cancel: activepointer = invalid_pointer_id; pause, sag motionevent.action_pointer_up: europa.eu.int pointerindex = f. getactionindex(); int pointerid = e.getpointerid (pointerindex); hvis (pointerid = = activepointer) (showtotaltime (f. geteventtime() - f. getdowntime()); activepointer = invalid_pointer_id;} pause.} tilbage.}, er vi nu ved, getactionmasked(), i stedet for, getaction() for skifte erklæring., getaction() tilbage kun en aktion, hvis der er en enkelt indikator, men med flere oplysninger, den kommer tilbage, en kombination af pilen foranstaltninger og en ændret pointer indeks.for at undgå os flytte ud pointer indeks os, vi kan bruge, getactionmasked(),, der blot returnerer en aktion, action_up,, action_pointer_down, osv.), og hvis dette viser aktion, anvendelse, getactionindex(), for at få gjort indeks.,, se på, action_pointer_up,, som er afgørende del af den nye kodeks.en, action_pointer_up, tilfælde betyder, at et fingerpeg er steget, men ikke den eneste point (hvis der kun er én indikator, og det går op for en, action_up, tilfælde sendes), og ikke nødvendigvis den aktive pointer.så henter vi indeks for denne indikator, og pilen id, der er forbundet med det.hvis det er den aktive point, - - den første finger, vi lægger på skærmen, - - så er vi færdige med at flytte vores boble.med andre ord i denne udgave af kodeksen, vi kun fokuserer på det første fingerpeg, og udtrykkeligt ignorere nogen yderligere anvisninger.intet andet vil ske for den boble, indtil alle fingre væk fra skærmen, og et nyt sæt rør begivenheder, der sker. hvis den aktive pointer er steget, så vi viser den samlede tid af drag gestus, og den aktive pointer variabel, invalid_pointer_id, for at vise, at det ikke længere er aktive.,, se, action_down,.hvis denne handling er sendt, så er dette den første retningslinje for at gå ned, så vi behandler det som aktivt pointer, og brug, getpointerid, for at redde pointer id som aktiv pointer., med begge, action_up, og action_move,, før du gør noget, vi ser, at der er en gyldig aktive pointer., action_move, sendes fra en aktiv står på skærmen, så vi vil kun klare data, hvis det kommer fra vores egen aktive pointer.,,, action_up, kun er sendt, når den endelige pointer op; men det sidste fingerpeg kunne være vores andet fingerpeg, i hvilket tilfælde vi ignorerer det.for at gøre det lidt tydeligere, her er en sekvens af pointer aktioner:,,, fif 1 (aktive point) går ned, action_down,.,, point 2 (ikke - aktive point) går ned, action_pointer_down,.,, både tips træk:, action_move,.,, fif 1 (aktiv point) skal action_pointer_up:,,.,, point 2 (ikke - aktive point) fortsætter med at bevæge sig, action_move,.,, point 2 (ikke - aktive point) skal action_up:,,.,,, på listen, at vi kun ønsker at reagere på pilen 1 begivenheder.så, hvis vi får en, action_up, omstændigheder, vi tjekker, om vi stadig har et gyldigt aktive pointer.hvis ikke, så er det, action_up, tilfælde kommer fra point 2, og at vi ignorerer det.hvis det aktive pointer, stadig er gyldig, vi viser den samlede tid skål besked.,, flere point, håndtering,, hvis du ønsker at behandle tilfælde af endnu et fingerpeg?dette ville skabe et fingerpeg indeks og far en skål budskab:,, private int newpointer = invalid_pointer_id; offentlige boolean ontouchevent (motionevent e) (//...kode som før...sag motionevent.action_pointer_down: europa.eu.int newpointerindex = f. getactionindex(); newpointer = e.getpointerid (newpointerindex). skål. maketext (ctx, "nye point.", skål. length_short). show(); bryde; //...resten af kode...}, ret ligetil.her er et interessant problem, selv om.hvis du lægger koden til at håndtere deres andet fingerpeg på nøjagtig samme måde, som det første, du kommer op med noget som dette:,, offentlige boolean ontouchevent (motionevent e) (kontakt (f. getactionmasked()) (//action_down, action_cancel, action_pointer_down som ovennævnte tilfælde motionevent.action_move: hvis (newpointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (newpointer); tråd. setbubble (e.getx (pointerindex), e.gety (pointerindex)} hvis (activepointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (activepointer); tråd. setbubble (e.getx (pointerindex), e.gety (pointerindex)} pause, sag motionevent.action_up: hvis (activepointer!= invalid_pointer_id) (showtotaltime (f. geteventtime() - f. getdowntime()); activepointer = invalid_pointer_id;} hvis (newpointer!= invalid_pointer_id) (newpointer = invalid_pointer_id;} pause, sag motionevent.action_pointer_up: //få pointerindex og pointerid som før, hvis pointerid = = activepointer) (showtotaltime (f. geteventtime() - f. getdowntime()); activepointer = invalid_pointer_id;} hvis (pointerid = = newpointer) (newpointer = invalid_pointer_id;} pause.} tilbage.},, løb det og du vil se det som du løfter en finger eller sætte det ned igen, boble humle mellem fingre og holder sig gnidningsløst.men hvis du sætter to fingre og flytte dem begge, boble bevæger sig med den første finger.prøv at skifte for, action_move, sag, som denne:,, sag motionevent.action_move: hvis (activepointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (activepointer); tråd. setbubble (e.getx (pointerindex), e.gety (pointerindex)} hvis (newpointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (newpointer); tråd. setbubble (e.getx (pointerindex), e.gety (pointerindex)} bryde;,, samle og flygt, og du vil finde at denne gang, boble, følger den anden pointer.hvad er det, der sker, er, at det er næsten umuligt at afholde en finger på skærmen, så action_move begivenheder er sendt af både tips hele tiden.de er for hurtig for det menneskelige øje til følge, så den ene, som du har bemærket, er der er evalueret.hvis du vil have noget mere kompliceret at ske - - for eksempel for boblen hoppe tydeligt mellem de to hovedlinjer, eller at følge et gennemsnit af dem begge... du bliver nødt til at gøre mere kompliceret behandling til at spore og gennemsnitlige både tips.,, gesturedetectors,, hvis du ønsker at lave komplicerede ting med flere fingre. du vil sikkert klare fingerpeg direkte, som i denne forelæsning.men en masse tid, du kan klare et af standard handlinger såsom pinch zoom.i dette tilfælde er en gesturedetector - filter objekt, der bliver motionevents i gestus begivenheder... kan være nyttig.i den næste forelæsning, vi vil se på med gesturedetector og ongesturelistener at håndtere flere rør begivenheder.

android multi-touch



Previous:
Next Page: