De androïde ontwikkeling training: hoe om te gaan met meerdere aan

vorig jaar, in de androïde training, kijken we naar de behandeling van het scherm.Dit is slechts een enkele punten behandelen, maar.Een robot kan gelijktijdig met meerdere punten, met als je op het scherm is ook meerdere vingers wat er zal gebeuren.Dit is hoe raak gebaren (zoals in te zoomen) werk, in feite, zien we dat de androïde ter ondersteuning van een aantal punten, door middel van een fout in een handleiding van de code.Een les die uit de bubblemove app, en slepen... Op het scherm.Als je op het eerste scherm plaatsen van een vinger, als je dat doet, dan heeft z 'n eerste schuim vinger, en wel op het scherm sprong naar een andere positie van de vinger.Dat is omdat het op dit moment alleen met de aanwijzing van de code van de standaard.De eerste is de aanwijzing van de standaard, maar als dit is van het scherm is afgenomen, de tweede die (als de enige resterende punten) in de standaard, en deze nieuwe standaard tip springen.Laten we eens kijken hoe de expliciete verwerking van meervoudige aanwijzing, een snelle injectie: helaas heeft alleen de simulator een aanraking van experimentele steun.Deze richtsnoeren moeten volgen, je moet met je apparatuur voor de test of voor experimenten en bolt apparaat optie bij een eerdere schakels, met meerdere punten: de fundamentele, zullen we onze reis beginnen - aan de behandeling door de vaststelling van een aanwijzing van fouten.Om dit te bereiken, moeten we rekening houden met de aanwijzingen van onze id - code.,, slechts een deel van de code in de laatste les, die we moeten veranderen, is, ontouchevent ().Het ziet eruit als zo 'n redacteur (en privé - les - variabelen een extra paar):,, particuliere statische laatste invalid_pointer_id = 1; de particuliere activepointer = invalid_pointer_id; openbare booleaanse onTouchEvent (de verplaatsing van e) {schakelaars (zoals getactionmasked ()) (zaak motionevent.action_down: draad. Setbubble (E. E. Gety getx (), ()); activepointer = e.getpointerid (0); de schuld; voorbeeld: als motionevent.action_move (activepointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (activepointer); draad. Setbubble (e.getx (pointerindex), e.gety (pointerindex));} breken; zaak motionevent.action_up: als (activepointer!= invalid_pointer_id) {showtotaltime (E - geteventtime () - e. Getdowntime ()); activepointer = invalid_pointer_id;} breken; zaak motionevent.action_cancel:activepointer = invalid_pointer_id; breuk; zaak motionevent.action_pointer_up: int pointerindex = E getactionindex (); in de pointerid = e.getpointerid (pointerindex); als (pointerid = = activepointer) {showtotaltime geteventtime () - e. E getdowntime ()); activepointer = invalid_pointer_id;} breken;} terug waar;}, die we nu gebruiken, getactionmasked () (), in plaats van, getaction, voor de omschakeling van de verklaring.(de), getaction, als er een aanwijzing is een actie, maar meer een aanwijzing, die de terugkeer van een aanwijzing van de aanwijzing van de rol en de combinatie van de index.Om te voorkomen dat we onze eigen aanwijzing van indicatoren, die we kunnen gebruiken, getactionmasked (), net terug van een actie (,,,,, action_pointer_down action_up, enz.), als dit een aanwijzing van de actie, het gebruik, de getactionindex (), heeft de naald index:.,, kijk, action_pointer_up, dit. Is een essentieel onderdeel van de nieuwe code.Een gebeurtenis, action_pointer_up, betekent dat een aanwijzing is, ging, maar niet de enige aanwijzing (als alleen een aanwijzing, dat naar een, action_up sturen, gebeurtenissen), niet noodzakelijk een positieve aanwijzing.Dus we hebben de aanwijzingen en de index, die verband houden met de identificatie van de aanwijzing.Als dit een actieve aanwijzing... Hebben we de eerste vingers op het scherm... En daarna gaan we ons schuim.Met andere woorden, in de versie van de code, richten we de eerste aanwijzing en expliciete negeren en verdere aanwijzingen.Er zal niks gebeuren totdat het schuim vinger weg van het scherm en een reeks nieuwe aan het incident.,, als de wijzer zijn gestegen, dan zijn we de totale duur van de actie en een actieve aanwijzing variabele, blijkt dat het niet langer actief invalid_pointer_id,,, wordt in action_down, kijk,,.Als dit om actie te ondernemen, dan is het naar de eerste, dus hebben we hem als de activiteiten van de aanwijzing en het gebruik van getpointerid, de aanwijzing van de activiteiten en de aanwijzing van de id, action_up action_move,,,,,, voor we iets doen, of we hebben een effectieve activiteiten wijzer.Op het scherm, action_move van een effectieve aanwijzing gestuurd, dus we hoeven het alleen maar gegevens uit ons eigen initiatief of aanwijzing.,,, action_up, alleen de laatste aanwijzing stuurt stijgen, maar dit is misschien onze laatste aanwijzing, de tweede, de aanwijzing, in dit geval, we vergeten het.Om een beetje meer duidelijk, dit is een aanwijzing voor de volgorde van de aanwijzing:,,, (punten 1) vallen, action_down:,,, punten 2 (niet - Aanwijzing van de daling van de activiteit, action_pointer_down):,,,,,, action_move wijzer: 1 (actieve wijzer. De aanwijzing) stijgen, action_pointer_up:,,, punten 2 (niet - actieve aanwijzing), action_move blijven:,.,, punten 2 (niet - Aanwijzing van een toename van de activiteit, action_up):,,,, op die lijst, we willen alleen maar reageren op de punten 1 gebeurtenissen.Dus, als we een, action_up, gebeurtenissen, laten we eerst kijken of we ook een geldige punten.Zo niet, dan action_up, het geval is, uit de punten 2, we het negeren.Als een indicator van een geldig blijft, zullen we altijd tijd voor "gebakken" informatie. Als je wil omgaan met een tweede aanwijzing van de gebeurtenissen, met zo veel wijzer.Dit wordt een aanwijzing - index en de populaire boodschap:,, een privé - newpointer = invalid_pointer_id; Bull onTouchEvent (verplaatsing van de gebeurtenissen (///////e).Code zoals...Zaak C - motionevent.action_pointer_down:int newpointerindex = E getactionindex (); newpointer = e.getpointerid (newpointerindex); geroosterd brood. Maketext (ctx, "een nieuwe aanwijzing., geroosterd brood. Length_short). De show (); de schuld; ///////...De rest van de code...}, is heel eenvoudig.Dit is een interessante rimpel, hoewel.Als je de code om de tweede wijzer je ook je eerste, je haalt zo:,, openbare booleaanse onTouchEvent (de verplaatsing van e) {schakelaars (zoals getactionmasked () {///////action_down, action_cancel, zoals de action_pointer_down motionevent.action_move: als (newpointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (newpointer); draad. Setbubble (e.getx (pointerindex), e.gety (pointerindex));} als (activepointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (activepointer); draad. Setbubble (e.getx (pointerindex), e.gety (pointerindex));} breken; zaak motionevent.action_up: als (activepointer!= invalid_pointer_id) {showtotaltime (E - geteventtime () - e. Getdowntime ()); activepointer = invalid_pointer_id;} als (newpointer!= = = = = = = invalid_pointer_id invalid_pointer_id) {} newpointer; breken; zaak motionevent.action_pointer_up://krijgen voor pointerindex en pointerid als (pointerid = = activepointer) {showtotaltime (E - geteventtime () - e. Getdowntime ()); activepointer = invalid_pointer_id;} als (pointerid = = newpointer) {newpointer = invalid_pointer_id;} breken;} terug waar;), de werking van dit, dat zie je wel als je vinger of leg het neer, tussen de vingers van de bubble - en het behoud van goede.Maar, als je er twee vingers naar beneden, en dan naar twee, schuim van mobiele, ten eerste, de vinger.Nu probeert te veranderen, action_move, omstandigheden, hier is de volgorde:,, de situatie motionevent.action_move: als (activepointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (activepointer); draad. Setbubble (e.getx (pointerindex), e.gety (pointerindex));} als (newpointer!= invalid_pointer_id) (int pointerindex = e.findpointerindex (newpointer); draad. Setbubble (e.getx (pointerindex), e.gety (pointerindex);}, opstelling en werking van het,,, je vindt, op dit moment, na het schuim en, ten tweede, een aanwijzing.Wat gebeurd is, is het nog steeds een vinger op het scherm is bijna onmogelijk, dus action_move gebeurtenissen door de aanwijzing van die alle tijd te sturen.Ze zijn te snel, de ogen van de mensen volgen, dus een bericht voor je is om te beoordelen.Als je wilt meer ingewikkelde dingen gebeuren, bijvoorbeeld, voor de rebound duidelijk tussen twee aanwijzingen of schuim, volgen ze de gemiddelde... Je moet doen en meer complexe behandeling gemiddeld gesturedetectors aanwijzing volgen.,,,, als je wil meer vingers om moeilijke dingen, misschien wil je je directe aanwijzing in de handleiding.Maar als je veel, misschien te maken met een groep van standaard gebaar, zoals in te zoomen.In dit geval, een gesturedetector - filter wordt motionevents object voor gebaar gebeurtenissen heel nuttig kan zijn.In de volgende les, zullen we zien of het gebruik gesturedetector en OnGestureListener verwerking, aan de gebeurtenissen.

android multi-touch



Previous:
Next Page: