¿Alguna vez has visto un hermoso GIF animado que se reproduce sin problemas y te has preguntado si podrías usarlo como fondo de pantalla en vivo en tu dispositivo Android? Bueno, puedes, y en este tutorial te voy a mostrar cómo.
Si prefiere utilizar una solución ya preparada en lugar de codificarla usted mismo, pruebe el elemento GIF Live Wallpaper en Envato Market. Te permite crear tu propia aplicación Live Wallpaper para Android basada en GIF animados.
La creación de un fondo de pantalla en vivo interesante y hermoso desde cero utilizando solo código matemático para generar los gráficos puede ser tedioso y lento. También requiere mucha creatividad. Por otro lado, crear un GIF animado o encontrar uno en línea es mucho más fácil. En este tutorial, aprenderá cómo convertir cualquier GIF animado en un fondo de pantalla en vivo.
Asegúrate de que tienes configurada la última versión de Android Studio. Puedes obtenerlo desde el sitio web del desarrollador de Android.
Aunque cualquier GIF animado funcionará, te sugiero que descargues un buen cinemagraph. Un cinemagraph no es más que un GIF animado, generalmente creado a partir de un video, que se reproduce sin interrupciones. Puedes encontrar muchos buenos en Flickr.
Para este tutorial, estoy usando un cinemagraph creado por el usuario djandyw.com de Flickr, ya que está disponible bajo una licencia de Creative Commons.
Inicie Android Studio, cree un nuevo proyecto y nombre el proyecto GIFWallpaper. Elija un nombre de paquete único si planea publicar esta aplicación en Google Play.
Establezca el SDK mínimo en API 8: Android 2.2 (Froyo).
Nuestra aplicación no va a tener un Actividad
, así que elige Añadir ninguna actividad y haga clic Terminar.
Un fondo de pantalla en vivo necesita un archivo que lo describa. Crea un nuevo archivo XML llamado res / xml / wallpaper.xml y reemplazar su contenido con el siguiente XML:
La etiqueta y la miniatura son particularmente importantes ya que se utilizarán cuando el fondo de pantalla aparezca en la lista de fondos de pantalla disponibles en su dispositivo.
Para ejecutar como fondo de pantalla en vivo, nuestra aplicación solo necesita un permiso, android.permission.BIND_WALLPAPER
.
Un fondo de pantalla en vivo se ejecuta como una Servicio
que puede recibir el android.service.wallpaper.WallpaperService
intencion de accion Nombra el Servicio
GIFWallpaperService Y añádelo al manifiesto del proyecto., AndroidManifest.xml.
A continuación, para asegurarse de que la aplicación se pueda instalar solo en dispositivos que pueden ejecutar fondos de pantalla en vivo, agregue el siguiente fragmento de código al manifiesto:
Copia el GIF animado que descargaste de Flickr al bienes Carpeta del proyecto. He llamado al GIF girl.gif.
Crear una nueva clase de Java y nombrarla GIFWallpaperService.java. Esta clase debe extender el Servicio de papel tapiz
clase.
clase pública GIFWallpaperService extiende WallpaperService
Porque Servicio de papel tapiz
Es una clase abstracta, hay que anular su onCreateEngine
Método y devolver una instancia de su propia Motor
, Que puede hacer los marcos de la GIF.
Para usar el GIF animado, primero debes convertirlo en un Película
objeto. Puedes usar el Película
clase decodificar stream
Método para hacerlo. Una vez el Película
El objeto se ha creado, páselo como parámetro al constructor de la costumbre. Motor
.
Esto es lo que el onCreateEngine
El método debería verse como:
@Override public WallpaperService.Engine onCreateEngine () try Movie movie = Movie.decodeStream (getResources (). GetAssets (). Open ("girl.gif")); volver nuevo GIFWallpaperEngine (película); catch (IOException e) Log.d ("GIF", "No se pudo cargar el activo"); retorno nulo
Vamos a empezar a trabajar en el Motor
ahora. Crear una clase llamada GIFWallpaperEngine dentro de GIFWallpaperService
clase y hazlo extender WallpaperService.Engine
.
Agregue los siguientes campos a esta nueva clase:
marcoDuración
: Este entero representa el retardo entre las operaciones de re-draw. Un valor de 20 te da 50 cuadros por segundo..visible
: Este booleano permite que el motor sepa si el fondo de pantalla en vivo está actualmente visible en la pantalla. Esto es importante, porque no deberíamos estar dibujando el fondo de pantalla cuando no está visible.película
: Este es el GIF animado en forma de Película
objeto.poseedor
: Esto se refiere a la SurfaceHolder
Objeto disponible para el motor. Debe inicializarse anulando el onCreate
método.entrenador de animales
: Esto es un Entrenador de animales
objeto que se utilizará para iniciar una Ejecutable
que se encarga de dibujar realmente el fondo de pantalla.Tu clase ahora debería verse así:
clase privada GIFWallpaperEngine extiende WallpaperService.Engine private final int frameDuration = 20; titular de SurfaceHolder privado; Película privada; booleano privado visible; manejador privado; public GIFWallpaperEngine (película) this.movie = movie; handler = new Handler (); @Override public void onCreate (SurfaceHolder surfaceHolder) super.onCreate (surfaceHolder); this.holder = surfaceHolder;
A continuación, crea un método llamado dibujar
Que dibuja los contenidos del GIF animado. Vamos a romper este método:
visible
variable se establece en cierto
. Solo continuamos si es.SurfaceHolder
es LockCanvas
método para obtener un Lona
recurrir a.Lona
despues de escalarlo y posicionarlo.Lona
de vuelta a SurfaceHolder
.Película
objetos fijar tiempo
método.entrenador de animales
después de esperar marcoDuración
milisegundos.los dibujar
El método nunca se llama directamente. Siempre se llama usando un Entrenador de animales
y un Ejecutable
objeto. Por lo tanto, hagamos la Ejecutable
objetar un campo de la clase y llamarlo drawGIF
.
Agregue el siguiente código a la GIFWallpaperService
clase:
private Runnable drawGIF = new Runnable () public void run () draw (); ; draw privado () if (visible) Canvas canvas = holder.lockCanvas (); canvas.save (); // Ajusta el tamaño y la posición para que // la imagen se vea bien en tu pantalla canvas.scale (3f, 3f); movie.draw (lienzo, -100, 0); canvas.restore (); holder.unlockCanvasAndPost (lienzo); movie.setTime ((int) (System.currentTimeMillis ()% movie.duration ())); handler.removeCallbacks (drawGIF); handler.postDelayed (drawGIF, frameDuration);
los onVisibilityChanged
El método se llama automáticamente cada vez que cambia la visibilidad del fondo de pantalla. Tenemos que anularlo y, en función del valor del visible
argumento, ya sea inicio o parada drawGIF
. los removeCallbacks
método de la Entrenador de animales
Se utiliza para detener cualquier pendiente. drawGIF
carreras.
@Override public void onVisibilityChanged (boolean visible) this.visible = visible; if (visible) handler.post (drawGIF); else handler.removeCallbacks (drawGIF);
Por último, anular el onDestroy
método de la Motor
para detener cualquier pendiente drawGIF
se ejecuta si el fondo de pantalla está desactivado.
@Override public void onDestroy () super.onDestroy (); handler.removeCallbacks (drawGIF);
Tu fondo de pantalla en vivo ya está listo. Compílelo e instálelo en su dispositivo Android. Una vez instalado, deberías poder encontrar el fondo de pantalla en la lista de fondos de pantalla disponibles.
La mayoría de los lanzadores te dan la opción de cambiar el fondo de pantalla después de un largo toque de toque. Alternativamente, puede ir a la configuración de pantalla para cambiar el fondo de pantalla.
Si el GIF parece demasiado pequeño o no está colocado correctamente, vuelva a la dibujar
Método y ajuste la escala y posición..
Ahora sabes cómo usar un GIF animado para crear un fondo de pantalla en vivo. Siéntete libre de experimentar con más GIFs. Si planeas publicar tu fondo de pantalla en vivo en Google Play, asegúrate de tener el permiso del creador para usar el GIF animado comercialmente. Visite el sitio web de Android Developer para obtener más información sobre el Servicio de papel tapiz
clase.