Slik bruker du Android-animasjonslyttere

Jeg liker å jobbe med Androids animasjonsrammeverk, som du kanskje har gjettet ved å lese tipsene mine om å lage en tilpasset "spinner", lenke animasjoner og bruke ViewFlipper-widgeten. Det er fremdeles litt løs-gåse når man sammenligner med iOS, men det gjør det ikke mindre kraftig. Dessuten er animasjoner i Android mye moro!

I dette innlegget demonstrerer jeg hvordan jeg bruker Android-animasjonslyttere når enkle tidsbaserte tilbakeringinger ikke er nok og XML-baserte animasjonssett blir for hårete. Du kan følge med på opplæringen, eller laste ned og importere prosjektet.

1. Åpne Eclipse og start et nytt Android-prosjekt rettet mot Android 1.6 eller nyere. Sørg for å gi nytt navn til oppstartsaktiviteten Main.java.

2. Jeg bruker et lite PNG-bilde jeg opprettet i GIMP; Jeg kaller det heartbeat.png, og det er bare en enkel gradient ( figur A ). I mappen / res, oppretter du en / tegnbar katalog og lagrer bildet der. Figur A

3. Deretter må vi lage en ny katalog i / res-mappen som heter / anim - det er her vi plasserer de faktiske animasjonene. I dette tilfellet opprettet jeg fire XML-animasjoner. De er alle transformasjoner, og ideen er å flytte hjerteryttsbildet vårt til høyre på skjermen, med en "blip" i midten som simulerer en hjerteovervåkningsskjerm ved sykehuskanten. Jeg skal ikke gå gjennom animasjonene linje for linje. Hvis du trenger å pusse opp Android XML-baserte animasjoner, er Googles utviklerguide den ledende myndigheten; bør du se seksjonen med tittelen Vis animasjon for en oversikt over transformasjoner.

 xform_left_to_right_begin.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: interpolator = "@android: anim / linear_interpolator"

android: fromXDelta = "5% p"

android: toXDelta = "50% p"

android: fromYDelta = "50% p"

android: toYDelta = "50% p"

android: fillBefore = "sant"

android: varighet = "900"

android: fillAfter = "true" />
 xform_to_peek.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: interpolator = "@android: anim / linear_interpolator"

android: fromXDelta = "50% p"

android: toXDelta = "60% p"

android: fromYDelta = "50% p"

android: toYDelta = "30% p"

android: fillBefore = "sant"

android: varighet = "200"

android: fillAfter = "true" />
 xform_from_peek.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: interpolator = "@android: anim / linear_interpolator"

android: fromXDelta = "60% p"

android: toXDelta = "70% p"

android: fromYDelta = "30% p"

android: toYDelta = "50% p"

android: fillBefore = "sant"

android: varighet = "200"

android: fillAfter = "true" />
 xform_left_to_right_end.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: interpolator = "@android: anim / linear_interpolator"

android: fromXDelta = "70% p"

android: toXDelta = "90% p"

android: fromYDelta = "50% p"

android: toYDelta = "50% p"

android: fillBefore = "sant"

android: varighet = "400"

android: fillAfter = "true" />

4. Den siste ressursen vi trenger for å få på plass er utformingen vår. Legg til en main.xml-fil i mappen / res / layout. Innholdet er ikke annet enn en tekstvisning og en bildevisning gjemt inne i en lineær layout.

 main.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: layout_width = "fill_parent"

android: layout_height = "fill_parent"

android: orientering = "vertikal" >

android: layout_width = "fill_parent"

android: layout_height = "wrap_content"

android: textSize = "16sp"

android: polstring = "25dip"

android: textColor = "#ffffff"

android: text = "Animation Listener Demo" android: layout_gravity = "center" android: gravity = "center" /> "wrap_content" android: layout_height = "wrap_content" android: bakgrunn = "@ drawable / heartbeat" android: id = "@ + id / blip" />

5. Vi er klare for vår / src-mappe og Main.java, som ligger bak oppsettet vårt. Vi ønsker å utvide aktiviteten og implementere animasjonslytter. Vi vil også ha et par variabler på klassetrinn.

 Main.java- pakke com.authorwjf.beep; 
 import android.app.Aktivitet; import android.os.Bundle; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.Animation.AnimationListener; import android.widget.ImageView; 
 public class Main utvider Aktivitetsredskaper AnimationListener { 
 privat int state_machine = 0; privat animasjon mAnim = null ; 
 } 

6. Deretter må vi overstyre både on create og aktiviteten på stop. Hvis du ikke håndterer saken om stopp, kan du forvente at appen oppfører seg uforutsigbart når det er et avbrudd som en telefonsamtale.

 @Override offentlig tomrom onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState); 

setContentView (R.layout. main );

mAnim = AnimationUtils. loadAnimation ( dette, R.anim. xform_left_to_right_begin ); mAnim.setAnimationListener ( dette );

ImageView img = (ImageView) findViewById (R.id. Blip );

img.clearAnimation ();

img.setAnimation (mAnim);

img.startAnimation (mAnim);

}
 @Overstyring 
 beskyttet tomrom onStop () { 
 super .onStop (); 
 prøv { 
 ImageView img = (ImageView) findViewById (R.id. Blip ); 
 img.clearAnimation (); 
 mAnim.setAnimationListener ( null ); 
 } fangst (unntak e) { 
 //Logg 
 } 
 } 

7. Det siste trinnet er å implementere tilbakeringingen av animasjonslytteren. I dette tilfellet er jeg bare interessert i å laste inn en ny animasjon når den nåværende slutter. Vi er imidlertid fortsatt pålagt å overstyre både start- og gjentagelsesfunksjonene.

 @Overstyring 
 public void onAnimationEnd (Animasjon a) { 
 a.setAnimationListener ( null ); 
 switch (state_machine) { 
 sak 0: 
 a = AnimationUtils. loadAnimation ( dette, R.anim. xform_to_peek ); 
 state_machine = 1; 
 pause ; 
 sak 1: 
 a = AnimationUtils. loadAnimation ( dette, R.anim. xform_from_peek ); 
 state_machine = 2; 
 pause ; 
 sak 2: 
 a = AnimationUtils. loadAnimation ( dette, R.anim. xform_left_to_right_end ); 
 state_machine = 3; 
 pause ; case 3: a = AnimationUtils. loadAnimation ( dette, R.anim. xform_left_to_right_begin ); 

state_machine = 0;

pause ;

}

a.setAnimationListener ( dette );

ImageView img = (ImageView) findViewById (R.id. Blip );

img.clearAnimation ();

img.setAnimation (a);

img.startAnimation (a);

}

@Overstyring

public void onAnimationRepeat (Animasjon arg0) {

}

@Overstyring

public void onAnimationStart (Animasjon arg0) {

}

På dette tidspunktet skal appen være klar til å kompilere og kjøre ( figur B ). Hvis du har en faktisk Android-enhet, anbefaler jeg at du prøver den på den fysiske maskinvaren. Den kjører på emulatoren, men animasjonene har en tendens til å være litt dust. Figur B

Etter at du har hatt en sjanse til å kjøre den som den, kan du ta noen minutter å gå tilbake og leke med timingvariablene i mappen / anim. Du kan produsere noen ganske kule effekter. Jeg tror du vil finne på slutten av dagen, Android's animasjonslytter er en pil til du kan stikke inne i din digitale skjelver.

© Copyright 2021 | pepebotifarra.com