- Presentación.
- Android no puede presentar gif animados directamente, así que debemos realizar algún algoritmo para poderlos visualizar.
- El truco consiste en obtener los fotogramas (frames) del gif animado y luego ir presentándolos secuencialmente mediante un Timer.
- Para obtener los frames de un gif animado podemos recurrir a alguno de los muchos programas que hay en internet.
- En mi caso he obtenido los frames mediante una web online, es decir, le envío mi archivo samurai.gif y me devuelve una carpeta comprimida con cada uno de los frame, la web en cuestión es:
http://uk.bloggif.com/gif-extract |
|
____________________________
- Código.
- Una vez obtenidos los frames, los subimos a la carpeta Files del proyecto.
- Bajar programa gif_animado.zip
Copia y pega este código en un nuevo proyecto |
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' Web para obtener online los frames de los gif animados
' http://uk.bloggif.com/gif-extract?id=fe9bddf8ff40ac05cfb0b6c78ad69a5a
End Sub
Sub Globals
Dim imagen As ImageView
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.Color = Colors.White
imagen.Initialize("imagen")
Activity.AddView(imagen, 40dip, 20dip, 260dip, 400dip)
' imagen.Bitmap = LoadBitmap(File.DirAssets, "samurai.gif")
For n = 1 To 18
Pausa(200)
imagen.Bitmap = LoadBitmap(File.DirAssets, "frame-" & n & ".gif")
If n =18 Then n = 1
Next
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Pausa(milisegundos As Long)
Dim now As Long
now = DateTime.now
Do Until (DateTime.now > now + (milisegundos))
DoEvents
Loop
End Sub |
______________________________
- ¿Qué significa DoEvents?
- Es una orden que permite que se realicen Eventos, un evento es pulsar un botón (Click), cambiar el valor de un EditText (Change), en general, realizar alguna acción por parte del usuario o la aplicación.
Si utilizamos un bucle que conlleva mucho tiempo su realización.
For n = 1 To 18 Pausa(200)
imagen.Bitmap = LoadBitmap(File.DirAssets, "frame-" & n & ".gif")
If n =18 Then n = 1
DoEvents
Next
- No podremos realizar ningún evento, ya que está en un lazo contínuo, y nunca saldrá del bucle. Para permitir que se puedan realizar Eventos mientras está dentro de un bucle infinito, se utiliza la orden DoEvents.
- El DoEvents es conveniente evitarlos en lazos infinitos, como indica este tutorial.
- A muchos programadores no les gusta utilizar el DoEvents.
_______________________________________
- Librerías para trabajar con GIF animados.
- B4A dispone de librerías para trabajar con GIF animados.
1.- Puedes utilizar la librería GifDecoder. A esta librería le cargamos directamente un archivo de gif animado...
gif.Load(File.DirAssets, "clonesheep.gif")
y ella se encarga de decodificar las imágenes que contiene el archivo y presentarlas mediante un Timer que pondremos en nuestro código.
Documentación de GifDecoder.
2.- Librería de GIF animados. (GifEncoder). Con esta librería podemos crear gif animados, es decir, sumar distintas imágenes como si fuesen fotogramas para realizar un gif animado.
________________________________