Lag en Live Wallpaper på Android Bruke en animert GIF

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.

  • frameDuration: Denne heltall representerer forsinkelsen mellom re-draw operasjoner. En verdi på 20 gir deg 50 bilder per sekund

    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.

  • Bruk SurfaceHolder sin lockCanvas metode for å få et lerret å trekke på.
  • Tegn en ramme av den animerte GIF på lerretet etter skalering og plassere det.

    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.