Create en Live Wallpaper på Android Bruke en animert GIF
36
Del
26
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Har du noen gang sett en vakker animert GIF som looper sømløst og lurte på om du kan bruke det som et levende bakgrunnsbilde på din Android-enhet? Vel, du kan, og i denne opplæringen jeg skal vise deg hvordan.
Innledning
Opprette en interessant og vakker levende bakgrunnsbilde fra grunnen av med bare matematikk og kode for å generere Grafikken kan være kjedelig og tidkrevende. Det krever også mye kreativitet. På den annen side, skaper en animert GIF eller finne en på nettet er mye enklere. I denne opplæringen, skal du lære hvordan du kan konvertere en animert GIF til et levende bakgrunnsbilde.
Forutsetninger
Sørg for at du har den nyeste versjonen av Android Studio satt opp. Du kan få det fra Android Developer nettstedet.
Selv om noen animerte GIF vil gjøre, foreslår jeg at du laster ned en god cinemagraph. En cinemagraph er ikke annet enn en animert GIF-vanligvis laget av en video-som looper sømløst. Du kan finne mange gode på Flickr.
For denne opplæringen, jeg bruker en cinemagraph opprettet av Flickr-bruker djandyw.com som det er tilgjengelig under en Creative Commons-lisens.
1. Opprett et nytt prosjekt
Komme Android Studio, opprette et nytt prosjekt, og navngi prosjektet GIFWallpaper. Plukk en unik pakke navn hvis du har tenkt å publisere denne appen på Google Play
Sett minimum SDK til API 8:.. Android 2.2 (Froyo)
Vår app ikke kommer til å ha en aktivitet, så velg Legg Ingen aktivitet og klikk Fullfør.
2. Beskriv Wallpaper
En levende bakgrunns trenger en fil som beskriver det. Opprett en ny XML-fil som heter res /xml /wallpaper.xml og erstatte innholdet med følgende XML:?
≪ xml version = "1.0" encoding = "UTF-8" > < tapet xmlns: android = "http://schemas.android.com/apk/res/android" android: label = "GIF Wallpaper" android: thumbnail = "@ teikne /ic_launcher" > < /tapet >
etikett og miniatyr er spesielt viktig ettersom de vil bli brukt når tapet dukker opp i listen over bakgrunnsbilder tilgjengelig på enheten.
3. Redigere Manifest
For å kjøre som et levende bakgrunnsbilde, trenger vår app bare én tillatelse, android.permission.BIND_WALLPAPER.
et levende bakgrunns kjører som en tjeneste som kan motta android.service. wallpaper.WallpaperService hensikt handling. Tjenestenavnet GIFWallpaperService og legge den til prosjektets manifest, AndroidManifest.xml
< tjeneste android: ".. GIFWallpaperService" name = android: frigitt = "true" android: label = "GIF Wallpaper" android: tillatelse = " android.permission.BIND_WALLPAPER "> < intent-filter > < handling android: name = "android.service.wallpaper.WallpaperService" /> < /intent-filter > < meta-data android: name = "android.service.wallpaper" android: ressurs = "@ xml /tapet" > < /meta-data > < /tjenesten >
Neste, for å sørge for at appen kan bare installeres på enheter som kan kjøre levende bakgrunnsbilder, legge til følgende tekstutdrag til manifestet:
< uses- funksjonen android: name = "android.software.live_wallpaper" android: påbudt = "true" > < /bruker-feature >
4. Legg Animated GIF
Kopier animerte GIF du lastet ned fra Flickr til eiendeler mappe av prosjektet. Jeg har kalt GIF girl.gif.
5. Lag Tjenesten
Opprett en ny Java klasse og name it GIFWallpaperService.java. Denne klassen skal forlenge WallpaperService klassen.
Public class GIFWallpaperService strekker WallpaperService {}
Fordi WallpaperService er en abstrakt klasse, må du overstyre sin onCreateEngine metode og returnere en forekomst av din egen motor, som kan gjengi rammene av GIF.
For å bruke den animerte GIF, må du først konvertere den til en film objekt. Du kan bruke film klassens decodeStream metode for å gjøre det. Når Movie objektet har blitt opprettet, passerer det som en parameter til konstruktøren av den tilpassede Engine
Dette er hva onCreateEngine metoden skal se ut.
Overridepublic WallpaperService.Engine onCreateEngine ( ) {try {Movie film = Movie.decodeStream (getResources () getAssets () åpen ("girl.gif"))..; returnere nye GIFWallpaperEngine (film); } catch (IOException e) {Log.d ("GIF", "Kan ikke laste eiendel"); returnere null; }}
6. Opprett Engine
La oss begynne å jobbe på motoren nå. Lag en klasse som heter GIFWallpaperEngine inne i GIFWallpaperService klassen og gjør det forlenge WallpaperService.Engine
Legg følgende felt til denne nye klassen.
synlig. Dette boolean lar motoren vite om levende bakgrunns er synlige på skjermen. Dette er viktig, fordi vi ikke skal tegne bakgrunnen når det ikke er synlig
film:.. Dette er den animerte GIF i form av en film objekt
holder: Dette refererer til SurfaceHolder objektet er tilgjengelig for motoren. Det må klargjøres ved å overstyre onCreate metoden
behandleren.. Dette er et Handler objekt som vil bli brukt til å starte et kjørbart som er ansvarlig for faktisk å tegne bakgrunnen
Klassen skal nå se slik ut:
private class GIFWallpaperEngine strekker WallpaperService.Engine {private final int frameDuration = 20; private SurfaceHolder holder; private Movie film; private boolean synlig; private Handler handler; offentlig GIFWallpaperEngine (Movie film) {this.movie = film; handler = new Handler (); }Override Public void onCreate (SurfaceHolder surfaceHolder) {super.onCreate (surfaceHolder); this.holder = surfaceHolder; }}
Deretter oppretter du en metode som heter uavgjort som trekker innholdet i den animerte GIF. La oss bryte denne metoden ned:
Vi først sjekke om det synlige variabelen er satt til true. Vi bare fortsette hvis det er.
Når all tegningen er ferdig, bestå Canvas tilbake til SurfaceHolder.
Oppdater den nåværende rammen av den animerte GIF bruker Movie objektets fulls metode.
Ring metoden igjen hjelp av behandleren etter venter frameDuration millisekunder.
Trekningen metoden aldri kalt direkte. Det er alltid kalt ved hjelp av en Handler og et kjørbart objekt. Derfor, la oss gjøre det kjørbart objekt et felt av klassen og kaller det drawGIF
Legg til følgende kode i GIFWallpaperService klassen.
Privat kjørbart drawGIF = new kjørbart () {public void run () { tegne(); }}; private void draw () {if (synlig) {lerret lerret = holder.lockCanvas (); canvas.save (); //Juster størrelse og posisjon slik at //bildet ser bra ut på skjermen canvas.scale (3f, 3f); movie.draw (lerret, -100, 0); canvas.restore (); holder.unlockCanvasAndPost (lerret); movie.setTime ((int) (System.currentTimeMillis ()% movie.duration ())); handler.removeCallbacks (drawGIF); handler.postDelayed (drawGIF, frameDuration); }}
onVisibilityChanged metoden blir automatisk kalt når synligheten av tapet endringer. Vi trenger å overstyre den og, basert på verdien av det synlige argument, enten å starte eller stoppe drawGIF. Den removeCallbacks metoden i Handler brukes til å stoppe enhver ventende drawGIF går
Overridepublic void onVisibilityChanged (boolsk synlig) {this.visible = synlig.; if (synlig) {handler.post (drawGIF); } Else {handler.removeCallbacks (drawGIF); }}
Til slutt, overstyre onDestroy metoden om motor for å stoppe eventuelle ventende drawGIF kjører hvis tapet er deaktivert
Overridepublic void onDestroy () {super.onDestroy (.); handler.removeCallbacks (drawGIF);}
7. Kompilere og installere
Din live tapet er nå klar. Kompilere den og installere den på din Android-enhet. Når programmet er installert, bør du være i stand til å finne tapetet i listen over tilgjengelige bakgrunner.
De fleste bæreraketter gi deg en mulighet til å endre bakgrunnsbilde etter en lang springen gest. Alternativt kan du gå til skjerminnstillingene for å endre bakgrunnsbilde.
Hvis GIF ser for små eller det er ikke riktig plassert, og deretter gå tilbake til uavgjort metode og justere skalaen og posisjon.
Konklusjon
Du vet nå hvordan de skal bruke en animert GIF å skape et levende bakgrunnsbilde. Føl deg fri til å eksperimentere med flere GIF. Hvis du planlegger å publisere levende bakgrunnsbilde på Google Play, sørg for at du har skaperen tillatelse til å bruke den animerte GIF kommersielt. Besøk Android Developer nettsted for å lære mer om WallpaperService klassen.