Lag en gjennomsiktig fremdriftsdialog på Android

I løpet av det siste året har jeg jobbet hardt på fritiden med å skrive et flerspillerspill for mobile enheter. Det går sakte, og ofte etter å ha satt inn åtte eller flere timer på dagen min spillejobb (hvor jeg også skriver applikasjoner), begynner jeg å tenke at jeg trenger å få en ny hobby som ikke involverer datamaskiner, mobiltelefoner eller nettbrett.

Likevel gjør jeg det ikke bare fordi jeg liker å se spillene mine ute i markedet, men også fordi spillprogrammering er unik ved at det ofte har en tendens til å vike fra standard plattformkonvensjoner. Spillutviklere synes seg ofte tenke kreativt, spesielt når det gjelder brukeropplevelse og brukergrensesnitt.

Hva har alt dette å gjøre med gjennomsiktige fremdriftsdialoger på Android? Vel, Android's out-the-box fremdriftsdialog er alt annet enn spennende ( figur A ).

Figur A
Ser du hva jeg mener?

For spillet mitt trengte jeg funksjonaliteten til en blokkerende fremdriftsdialog uten dialogdelen. Etter å ha pirket rundt Android-dokumentasjonen, et antall utviklerfora, og mye prøving og feiling, lyktes jeg med å lage en transparent fremdriftsdialog som ganske enkelt animerer et bilde jeg velger. Denne opplæringen leder deg gjennom trinnene, slik at du kan gjøre det samme. Hvis du foretrekker det, kan du laste ned og importere prosjektet direkte i Eclipse.

1. Lag et nytt Android-prosjekt i Eclipse som målretter Android 2.2 eller bedre.

2. I mappen / res / layout oppretter du en lineær layout i Activity_main.xml. Legg til en tekstetikett og en knapp.

 activity_main.xml 

3. I mappen / res / Values ​​åpner du styles.xml, og det er her du vil legge til stilen for vår transparente dialog. Sørg for å spesifisere overordnet attributt, ellers får du problemer ved kjøretid.

 styles.xml @null @android: color / transparent true @null @null @android: style / Animation.Dialog state Uspesifisert | adjustPan true @android: color / transparent 

4. Lag en / tegnbar mappe i / res katalogen og legg til et bilde for å representere spinneren vår. Animasjonen er en enkel rotasjon, så du vil bruke noe som er nøyaktig så bredt som det er høyt. Her er bildet jeg valgte ( figur B ).

Figur B

5. Nå kan du implementere MainActivity.java-filen. Først tilsidesetter du on create og kobler opp knapphåndtereren. Legg merke til at i on create dirigerer du en dialog og en behandler; disse refererer til en indre klasse som du snart kommer til. Det siste MainActivity.java er ansvarlig for er å slippe behandleren og dialogen når aktiviteten blir ødelagt.

 MainActivity.java-pakke com.authorwjf.transparentprogressdialog; import android.os.Bundle; import android.os.Handler; import android.app.Aktivitet; import android.app.Dialog; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import android.widget.ImageView; import android.widget.LinearLayout; offentlig klasse MainActivity utvider Aktivitetsredskaper OnClickListener {private TransparentProgressDialog pd; privat håndterer h; privat kjørbar r; @Override beskyttet tomrom onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); h = ny håndterer (); pd = new TransparentProgressDialog (dette, R.drawable.spinner); r = new Runnable () {@Override public void run () {if (pd.isShowing ()) {pd.dismiss (); }}}; findViewById (R.id.the_button) .setOnClickListener (this); } @Overr offentlig tomrom onClick (Vis v) {pd.show (); h.postDelayed (r, 5000); } @Overr beskyttet tomrom onDestroy () {h.removeCallbacks (r); if (pd.isVisning ()) {pd.dismiss (); } super.onDestroy (); }} 

6. Legg til den indre klassen rett under din on Destroy-metode. Konstruktøren bygger din transparente dialog, og visningsmetoden viser den og starter animasjonen som kjører.

 privat klasse TransparentProgressDialog utvider Dialog {private ImageView iv; public TransparentProgressDialog (Context context, int resourceIdOfImage) {super (context, R.style.TransparentProgressDialog); WindowManager.LayoutParams wlmp = getWindow (). GetAttributter (); wlmp.gravity = Gravity.CENTER_HORIZONTAL; getWindow () setAttributes (WLMP.); setTitle (null); setCancelable (false); setOnCancelListener (null); LinearLayout layout = ny LinearLayout (kontekst); layout.setOrientation (LinearLayout.VERTICAL); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams (LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); iv = ny ImageView (kontekst); iv.setImageResource (resourceIdOfImage); layout.addView (iv, params); addContentView (layout, params); } @Overr offentlig annullert show () {super.show (); RotateAnimation anim = new RotateAnimation (0.0f, 360.0f, Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f); anim.setInterpolator (ny LinearInterpolator ()); anim.setRepeatCount (Animation.INFINITE); anim.setDuration (3000); iv.setAnimation (Anim); iv.startAnimation (Anim); }} 

Legg den resulterende applikasjonen på en enhet eller emulator for å se på ( figur C ).

Figur C

Det er ikke hver dag du vil ha et stort rødt solbrett midt i applikasjons-brukergrensesnittet, men poenget er at du kan legge et hvilket som helst bilde av alle størrelser der. Du kan bruke hvilken som helst av Android’s innebygde animasjoner, og det er like enkelt å legge til flytende tekst som å instantisere en tekstvisning i klassekonstruktøren og skyve den inn i oppsettet.

Når du har en sjanse til å leke med det, kan du dele tankene dine i diskusjonstråden.

© Copyright 2021 | pepebotifarra.com