Android har en rekke tilpassingsfunksjoner som hjelper brukerne til å tilpasse mange aspekter av brukerens brukeropplevelse. En av disse funksjonene er live bakgrunnsbilde. Live bakgrunnsbilder forblir ikke som statiske bakgrunnsbilder, men har i stedet interaktive funksjoner. Lær hvordan du lager et levende bakgrunnsbilde i denne opplæringen!
En levende bakgrunnsbilde, på Android, brukes vanligvis som bakgrunn på hjemmeskjermen som animerer eller endres over tid på en eller annen måte. Hvis du har en Android-enhet, har du sannsynligvis sett et par av de innebygde live bakgrunnsbilder, som den hvor blader ser ut til å falle i rippling vann.
Som utvikler kan du lage og publisere live bakgrunnsbilder. Prosessen er ikke særlig vanskelig. Å lage en levende bakgrunnsbilde som er fascinerende og ønskelig når du ikke tømmer brukerens batteriladning er imidlertid noe av en utfordring. I denne veiledningen vil vi gå gjennom prosessen med å skape et levende bakgrunnsbilde som oppfører seg. :)
Nylig viste vi deg hvordan du bruker RenderScript. Resultatet av denne opplæringen var en enkel snøfallende effekt. La oss slå den effekten inn i et levende bakgrunnsbilde.
Åpne kildekoden for denne opplæringen er tilgjengelig for nedlasting. Vi anbefaler at du bruker den til å følge med. Kodelistene i denne opplæringen inkluderer ikke hele innholdet i hver fil og dekker ikke prosjektoppsett eller kode som er dekket i tidligere opplæringsprogrammer.
Du kan si at et levende bakgrunnsbilde er bare en tjeneste. Tross alt, for å lage et levende bakgrunnsbilde, strekker du bare fra WallpaperService-klassen og implementerer en enkelt metode, ofte med bare en enkelt linje med kode, og legger deretter til tjenestenes definisjon i manifestfilen.
La oss se hvordan dette ser ut. Her er WallpaperService:
offentlig klasse FallingSnowWallpaperService utvider WallpaperService @Override public Engine onCreateEngine () returner ny FallingSnowWallpaperEngine ();
Og du er ferdig! Ok, egentlig ikke. Størstedelen av arbeidet til et levende bakgrunn foregår i en WallpaperService.Engine implementering. Det er her du kan svare på tilbakeringinger som onSurfaceChanged () og onSurfaceCreated (). Høres kjent ut? Disse er svært lik de tilbakeringingene du kanskje har sett når du implementerer et visning eller annet overflatebasert objekt.
Og nå er virkeligheten av levende bakgrunnsbilder avslørt: Når du implementerer WallpaperService.Engine, alt du gjør er å tegne til en gitt overflate (via en overflatehøvel). Det er nesten så enkelt. Før vi kommer til implementeringen av WallpaperService.Engine, la oss se på noen av de andre konfigurasjonsaspektene.
Siden en levende bakgrunnsbilde er en tjeneste, må du registrere tjenesten i manifestfilen din. Tjenestegodkjenningen kan se slik ut:
Det er et par ting å merke seg her. For det første krever bruk av denne tjenesten BIND_WALLPAPER-tillatelsen (det vil si at en annen app ved hjelp av dette tapetet vil kreve BIND_WALLPAPER-tillatelsen som en brukstillatelsesoppføring i manifestet). For det andre er hensiktsfiltret en streng som ligner grunnklassen. Endelig peker metadataene til en XML-fil. Denne XML-filen, definert av utvikleren, gir noen ekstra tapetkonfigurasjon. Her er vår XML-fil for de levende bakgrunnsbildeinnstillingene kalt fallingsnow_wp:
Her bruker vi bare det vanlige lanseringsikonet som miniatyrbildet og peker på en streng som vil vises som beskrivelsen i oppførelsen av bakgrunnsbilder. Hvis din levende bakgrunnsbilde trenger konfigurasjon, vil du peke på det med android: settingsActivity-egenskapen.
Til slutt, tilbake i manifestfilen din, ikke glem å angi bruk-funksjonen for android.software.live_wallpaper:
Nå som kjedelig, men kritisk, ting er ute av veien, la oss gå tilbake til det virkelige arbeidet: skape WallpaperService.Engine-klassen. Siden vi allerede har en RenderScript-fil for å gjøre noen animasjoner, er alt vi trenger å gjøre, å knytte oppførelsen til den nye overflaten. Metoden onSurfaceCreated () for Engine er et flott sted å opprette RenderScriptGL-objektet vi trenger:
@Override public void onSurfaceCreated (SurfaceHolder holder) super.onSurfaceCreated (holder); RenderScriptGL.SurfaceConfig surfaceConfig = nytt RenderScriptGL.SurfaceConfig (); mRenderScriptGL = ny RenderScriptGL (FallingSnowWallpaperService.this, surfaceConfig); // bruk lav for bakgrunnsbilder mRenderScriptGL.setPriority (RenderScriptPriority.LOW);
Vi stiller også gjengivelsesprioriteten til lavt - dette er et levende bakgrunnsbilde og ikke et kritisk spill eller brukergrensesnitt. Det bør ikke bremse noe annet på systemet.
Rengjør dette i metoden onSurfaceDestroyed ():
@Override public void onSurfaceDestroyed (SurfaceHolder holder) super.onSurfaceDestroyed (holder); hvis (mSnowRS! = null) mSnowRS.stop (); mSnowRS = null; hvis (mRenderScriptGL! = null) mRenderScriptGL.destroy (); mRenderScriptGL = null;
Metoden onSurfaceChanged () er et flott sted å initialisere RenderScript-klassen. Dette er førsteplassen hvor du finner ut detaljer om hva du skal gjengi, for eksempel bredde og høyde. Dette er også der vi setter overflaten for RenderScriptGL-klassen.
@Override public void onSurfaceChanged (SurfaceHolder holder, int format, int bredde, int høyde) super.onSurfaceChanged (holder, format, bredde, høyde); hvis (mRenderScriptGL! = null) mRenderScriptGL.setSurface (holder, bredde, høyde); hvis (mSnowRS == null) mSnowRS = ny SnowRS (bredde, høyde); mSnowRS.init (mRenderScriptGL, getResources (), isPreview ()); mSnowRS.start ();
Det er en god ide å stoppe tapetet når det ikke er synlig.
@Override public void onVisibilityChanged (boolean synlig) super.onVisibilityChanged (synlig); hvis (mSnowRS == null) hvis (synlig) mSnowRS.start (); ellers mSnowRS.stop ();
Og det er det. Levende tapetruller. Eller animerer. Eller gjør hva det er du vil at den skal gjøre.
Vil du svare på kraner? Overstyr kommandoen onCommand () i WallpaperService.Engine-klassen.
Vil du justere stillinger når brukeren svinger mellom startskjermsider? Overstyr metodene onOffsetsChanged () i WallpaperService.Engine-klassen.
Vil du vite om brukeren ser forhåndsvisningen før du stiller bakgrunnen? Kall isPreview () -metoden til WallpaperService.Engine-klassen og kontroller resultatene.
Den fullstendige implementeringen av vår WallpaperService.Engine-klasse finner du i FallSnowWallpaperService.java av open source-prosjektet.
La oss ta en titt på Live Wallpaper:
Det skal se kjent ut; Det er det samme vi så i RenderScript-aktiviteten.
Live bakgrunnsbilder er et flott sted å lage svært effektive og flotte grafiske effekter. Men du må gjøre det slik at brukeren ikke nødvendigvis sitter der og ser på en demo (du vet, som de fra scene.org). Hva dette betyr er at du må kanskje redusere bildefrekvenser, redusere piksler, polygontall eller teksturdetaljer for å holde bakgrunnen interessant, men ikke stressende på CPU, GPU og batteri. Hvis brukerne finner ut at ditt levende tapet spiser batteriet, gjør det at appen din ser dårlig ut, og det gjør at enheten virker svak med lav batterilevetid. En dårlig opplevelse med en Android-enhet får alle utviklere til å lide en dårlig rap.
Demoversikten og aktiviteten (fra den forrige opplæringen) er fortsatt tilgjengelig når appen starter. I stedet for å fjerne den, hvorfor ikke bare legge til en handler, slik at når en bruker klikker på den, vil de levende tapetinnstillingene komme opp slik at brukeren kan velge live bakgrunnsbilde?
Offentlig tomgang onWallpaperSettings (Se visning) Intent wallpaperSettings = new Intent (Intent.ACTION_SET_WALLPAPER); startActivity (wallpaperSettings);
Hvorfor ikke, ja! Det var lett. På hvilken som helst klikkbar visning, legg bare til android: onClick = "onWallpaperSettings" -egenskapen, og du er god til å gå.
Her er et stillbilde:
Live bakgrunnsbilder er en praktisk måte å utvide din søknad utover sine typiske grenser. Har du et rollespill? Lag noen fine live bakgrunnsbilder med hovedpersonene. Bare vær sikker på at du bruker sunn fornuft når du render til skjermen slik at brukerens opplevelse med enheten ikke lider.
Gi oss beskjed om hvilke kule levende bakgrunnsbilder du bygger i kommentarene!
Mobilutviklere Lauren Darcey og Shane Conder har medforfatter flere bøker om Android-utvikling: en grundig programmeringsbok med tittel Android Wireless Application Development og Sams Lær deg selv Android Application Development i 24 timer. Når de ikke skriver, bruker de sin tid på å utvikle mobil programvare hos deres firma og tilby konsulenttjenester. De kan nås via e-post til [email protected], via bloggen deres på androidbook.blogspot.com, og på Twitter @androidwireless.