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.
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.
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.
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.
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.
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.
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:
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.
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;
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ă:
vizibil
este setată la Adevărat
. Continuăm doar dacă este.SurfaceHolder
„s lockCanvas
metoda de a obține o pânză
pentru a atrage.pânză
după scalarea și poziționarea.pânză
înapoi la SurfaceHolder
.Film
obiecte potriveste ora
metodă.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);
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.
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ă.