Creați un Wallpaper Live pe Android utilizând un animat GIF

Ați văzut vreodată un GIF animat frumos, care se potrivește perfect și se întreba dacă ați putea să-l utilizați ca fundal live pe dispozitivul dvs. Android? Ei bine, puteți, și în acest tutorial vă voi arăta cum.

Căutați o comandă rapidă?

Dacă preferați să utilizați o soluție gata în loc să o codificați singură, încercați elementul GIF Live Wallpaper de pe Envato Market. Vă permite să creați propria aplicație Live Wallpaper pentru Android bazată pe fișiere GIF animate. 

Introducere

Crearea unui tapet interesant și frumos live de la zero folosind doar matematica și codul pentru a genera grafica poate fi obositoare și consumatoare de timp. De asemenea, este nevoie de o mulțime de creativitate. Pe de altă parte, crearea unui GIF animat sau găsirea acestuia online este mult mai ușoară. În acest tutorial, veți învăța cum să convertiți orice animație GIF într-o imagine de fundal live.

Cerințe preliminare

Asigurați-vă că aveți cea mai recentă versiune de Android Studio. Puteți să-l obțineți de pe site-ul Android Developer.

Chiar dacă orice animat GIF va face, vă sugerez să descărcați un cinemagraph bun. Un cinematograf nu este altceva decât un animat GIF - de obicei, creat dintr-un videoclip - care bate perfect. Puteți găsi o mulțime de bune pe Flickr.

Pentru acest tutorial, folosesc un film creat de utilizatorul djandyw.com de la Flickr, deoarece este disponibil sub licența Creative Commons.

1. Creați un proiect nou

Porniți Android Studio, creați un nou proiect și denumiți proiectul GIFWallpaper. Alegeți un nume de pachet unic dacă intenționați să publicați această aplicație pe Google Play.

Setați setul SDK minim la API 8: Android 2.2 (Froyo).

Aplicația noastră nu va avea o aplicație Activitate, alegeți astfel Adăugați nicio activitate și faceți clic pe finalizarea.

2. Descrieți imaginea de fundal

Un wallpaper live are nevoie de un fișier care îl descrie. Creați un nou fișier XML numit res / xml / wallpaper.xml și înlocuiți conținutul cu următorul XML:

  

Eticheta și miniatura sunt deosebit de importante, deoarece vor fi folosite atunci când imaginea de fundal apare în lista de imagini de fundal disponibile pe dispozitiv.

3. Editați Manifestul

Pentru a rula ca tapet live, aplicația noastră are nevoie de o singură permisiune, android.permission.BIND_WALLPAPER.

Un tapet live trăiește ca un Serviciu care poate primi  android.service.wallpaper.WallpaperService acțiune intenționată. Denumiți Serviciu GIFWallpaperService și adăugați-o la manifestarea proiectului, AndroidManifest.xml.

      

Apoi, pentru a vă asigura că aplicația poate fi instalată numai pe dispozitive care pot rula imagini de fundal vii, adăugați în manifest manifestarea următoare:

 

4. Adăugați GIF animat

Copiați animația GIF pe care ați descărcat-o de pe Flickr la bunuri dosarul proiectului. Am numit GIF-ul girl.gif.

5. Creați serviciul

Creați o nouă clasă Java și denumiți-o GIFWallpaperService.java. Această clasă ar trebui să extindă WallpaperService clasă.

clasa publica GIFWallpaperService se extinde pe WallpaperService 

pentru că WallpaperService este o clasă abstractă, trebuie să o depășiți onCreateEngine și returnați o instanță proprie Motor, care poate face cadrele GIF.

Pentru a utiliza animația GIF, trebuie mai întâi să o convertiți într-un Film obiect. Puteți utiliza funcția Film clasa lui decodeStream metodă de a face acest lucru. Odata ce Film obiect a fost creat, treci ca un parametru pentru constructorul personalizat Motor.

Aceasta este ceea ce onCreateEngine metoda ar trebui să arate ca:

@Override publice WallpaperService.Engine onCreateEngine () încercați Movie movie = Movie.decodeStream (getResources (). GetAssets () open ("girl.gif")); returnează noul GIFWallpaperEngine (film);  captură (IOException e) Log.d ("GIF", "Nu s-a putut încărca activ"); retur nul; 

6. Creați motorul

Să începem să lucrăm la Motor acum. Creați o clasă numită GIFWallpaperEngine în interiorul GIFWallpaperService clasa și să se extindă WallpaperService.Engine.

Adăugați următoarele câmpuri la această clasă nouă:

  • frameDuration: Acest număr reprezintă întârzierea dintre operațiile de re-desenare. O valoare de 20 vă oferă 50 de cadre pe secundă.
  • vizibil: Acest boolean permite motorului să știe dacă imaginea de fundal live este vizibilă pe ecran. Acest lucru este important, pentru că nu ar trebui să desenăm tapetul atunci când nu este vizibil.
  • film: Acesta este animatul GIF sub forma unui Film obiect.
  • deținător: Aceasta se referă la SurfaceHolder obiect disponibil pentru motor. Trebuie să fie inițializată prin suprimarea onCreate metodă.
  • manipulant: Acesta este un manipulant obiect care va fi folosit pentru a porni a runnable care este responsabil pentru desenul tapetului.

Clasa ar trebui să arate astfel:

clasa privată GIFWallpaperEngine se extinde pe WallpaperService.Engine private final frame frameDuration = 20; Suport privat pentru SurfaceHolder; Film privat de film; boolean privat vizibil; manipulator privat de manipulare; public GIFWallpaperEngine (film de film) this.movie = film; handler = manipulator nou ();  @Override publice void onCreate (suprafațăHolder surfaceHolder) super.onCreate (surfaceHolder); this.holder = surfaceHolder; 

Apoi, creați o metodă numită a desena care atrage conținutul animației GIF. Să ne despărțim această metodă:

  • Mai întâi verificăm dacă vizibil este setată la Adevărat. Continuăm doar dacă este.
  • Folosește SurfaceHolder„s lockCanvas metoda de a obține o pânză pentru a atrage.
  • Desenați un cadru al GIF animat pe pânză după scalarea și poziționarea.
  • Odată ce sa realizat desenul, treceți pânză înapoi la SurfaceHolder.
  • Actualizați cadrul curent al animației GIF folosind Film obiecte potriveste ora metodă.
  • Apelați din nou metoda utilizând manipulant după ce așteaptă frameDuration milisecunde.

a desena metoda nu este niciodată chemată direct. Este numit întotdeauna folosind a manipulant și a runnable obiect. Prin urmare, hai să facem runnable obiectează un câmp al clasei și o numește drawGIF.

Adăugați următorul cod la GIFWallpaperService clasă:

privat RunAble drawGIF = nou Runnable () public void run () draw (); ; void draw privat () if (vizibil) canvas canvas = holder.lockCanvas (); canvas.save (); // Reglați mărimea și poziția astfel încât // imaginea să arate bine pe ecranul dvs. canvas.scale (3f, 3f); film.draw (canvas, -100, 0); canvas.restore (); holder.unlockCanvasAndPost (pânză); film.setTime ((int) (System.currentTimeMillis ()% film.durare ())); handler.removeCallbacks (drawGIF); handler.postDelayed (drawGIF, frameDuration);  

onVisibilityChanged metoda se numește automat ori de câte ori se modifică vizibilitatea tapetului. Trebuie să o ignorăm și, pe baza valorii vizibil argument, fie începeți, fie opriți drawGIF. removeCallbacks metodă a manipulant este folosit pentru a opri orice în așteptare drawGIF ruleaza.

@Override public void onVisibilityChanged (vizibil boolean) this.visible = visible; dacă (vizibil) handler.post (drawGIF);  altfel handler.removeCallbacks (drawGIF); 

În cele din urmă, ignorați onDestroy metodă a Motor pentru a opri orice așteptare drawGIF rulează dacă imaginea de fundal este dezactivată.

@Override public void peDestroy () super.onDestroy (); handler.removeCallbacks (drawGIF); 

7. Compilați și instalați

Imaginea de fundal live este acum gata. Compilați-l și instalați-l pe dispozitivul Android. După instalare, ar trebui să găsiți imaginea de fundal în lista de imagini de fundal disponibile.

Cele mai multe lansatoare vă oferă o opțiune de a schimba imaginea de fundal după un gest lung de apăsare. Alternativ, puteți accesa setările de afișare pentru a schimba imaginea de fundal.

Dacă GIF pare prea mic sau nu este poziționat corect, reveniți la a desena și ajustați scara și poziția.

Concluzie

Acum știți cum să utilizați un animat GIF pentru a crea o imagine de fundal live. Simțiți-vă liber să experimentați mai multe GIF-uri. Dacă intenționați să publicați imaginea de fundal live pe Google Play, asigurați-vă că aveți permisiunea creatorului de a utiliza GIF-ul animat comercial. Accesați site-ul web pentru dezvoltatori Android pentru a afla mai multe despre WallpaperService clasă.


Cod