Kodeutfordring: Bruk Android sine oppdaterte animasjons-API-er for en sjanse til å vinne swag

Siden det ble avduket i 2007, har Android kommet langt. Det tar bare et raskt blikk på noen få skjermbilder av Donut ( figur A ) og KitKat ( figur B ) for å se hva jeg mener.

Figur A

Figur B

Hvis du, som meg, har vært med på turen, har du sannsynligvis apper enten i Market eller mer sannsynlig pensjonert som kan dra nytte av noen av de nye tilgjengelige API-ene. Når redaktøren min her på TechRepublic foreslo at jeg skulle legge ut en kodeutfordring for leserne, bestemte jeg meg for at det ville være fornuftig å støve av et gammelt kodeeksempel jeg hadde lagt rundt for å samarbeide med leserne for å effektivisere det ved å bruke noen av de praktiske animasjons-API-ene som ble introdusert med Honeycomb.

Nedenfor har jeg en kodeeksempel jeg bestemte meg for å kalle "Her eller Der." I teorien er det veldig greit. Trykk på Here-knappen, og det røde rektanglet glir mot venstre; trykk på Der-knappen, og den glir til høyre. På det tidspunktet jeg skrev prøven, var Android 1.6 det jeg måtte jobbe med. Selv om animasjonen ikke var veldig vanskelig, var det en kamp for å oppdatere den påfølgende layouten. I utgangspunktet måtte jeg tilbakestille layoutparametrene for visningen jeg animerte etter animasjonen og deretter tvinge oppsettet til å gjengis igjen. Ikke bare er det en klumpete løsning, men den har en irriterende flimmer.


Når jeg ser på koden nå, kryper jeg, og du gjør sannsynligvis det samme. Det er greit - faktisk er det ideen. I et påfølgende innlegg vil jeg dele hvordan du takler denne animasjonen ved å bruke den oppdaterte Android SDK. Å se den strømlinjeformede versjonen av koden ved siden av originalen vil virkelig hamre hjem hvor mye enklere Android-utvikling har blitt.

Å, og nevnte jeg at vi vil sende TechRepublic swag til leseren som sender inn den mest elegante refactoring av koden mellom nå og da? Nei? Vi vil vel. Så ta noen minutter å oppdatere prøven (målretting Android 3.0 eller bedre), zip den opp og send den på min e-postadresse mary dot weilage på cbs dot com innen 6. desember 2013 . Selv om du ikke er en Android-utvikler, men du tenker å bli en, bør du ta en kikk på denne kodeutfordringen. Hvis du ikke har erfaring med animasjonsrammen, er Googling Honeycombs objektanimator og den påfølgende visningsegenskapen animator et godt sted å starte.

 Activity_main.xml MainActivity.java-pakke com.authorwjf.hereorthere; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.TranslateAnimation; import android.widget.RelativeLayout; import android.app.Aktivitet; offentlig klasse MainActivity utvider Aktivitets implementeringer OnClickListener, AnimationListener {privat endelig statisk int HER = -1; privat endelig statisk int DER = 1; privat TranslateAnimation anim; privat Vis markør; privat int-skjermbredde; privat int sentrumOfScreen; privat int dest; @Override beskyttet tomrom onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); screenWidth = (int) (getWindowManager (). getDefaultDisplay (). getWidth ()); centerOfScreen = (int) (skjermbredde * .5); markør = findViewById (R.id.cursor); findViewById (R.id.here_button) .setOnClickListener (this); findViewById (R.id.there_button) .setOnClickListener (this); } @Overr offentlig tomrom onClick (Vis v) {if (v.getId () == R.id.here_button) {animere (HER); } annet {animert (DER); }} animert privat tomrom (int whichWay) {if (anim! = null &&! anim.hasEnded ()) retur; flyte mål; int currentX = cursor.getLeft (); hvis (somWay == HER) {if (currentX + cursor.getWidth () centerOfScreen) returnerer; target = findViewById (R.id.there_button) .getLeft () - (currentX + cursor.getWidth ()); } anim = new TranslateAnimation (TranslateAnimation.ABSOLUTE, 0, TranslateAnimation.ABSOLUTE, target, TranslateAnimation.ABSOLUTE, 0.0f, TranslateAnimation.ABSOLUTE, 0.0f); anim.setDuration (500); dest = (int) mål + cursor.getLeft () + cursor.getWidth (); anim.setAnimationListener (this); cursor.startAnimation (Anim); } @Override offentlig tomrom påAnimationEnd (Animasjon arg0) {RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (cursor.getWidth (), cursor.getHeight ()); if (dest> = centerOfScreen) {params.addRule (RelativeLayout.LEFT_OF, R.id.there_button); } annet {params.addRule (RelativeLayout.RIGHT_OF, R.id.here_button); } params.addRule (RelativeLayout.CENTER_VERTICAL); cursor.setLayoutParams (parametere); } @Override public void onAnimationRepeat (Animation arg0) {// TODO Auto-generated method stub} @Override public void onAnimationStart (Animation arg0) {// TODO Auto-generated method stub}} 
For de som foretrekker det, kan du laste ned og importere hele prosjektet direkte til Eclipse.
Ikke glem: skaff deg den refactored-versjonen av denne koden til oss innen 30. november for å være kvalifisert til prisen og rope ut i en kommende artikkel.
Jeg ser frem til å lese innleggene dine!

© Copyright 2020 | mobilegn.com