android - hacer - crear gif online alta calidad
¿Cómo animar imágenes.gif en un android? (6)
Bueno, pude animar imágenes de Android usando este simple código:
canvas.drawColor(Color.WHITE);
super.onDraw(canvas);
long now=android.os.SystemClock.uptimeMillis();
System.out.println("now="+now);
if (moviestart == 0) { // first time
moviestart = now;
}
System.out.println("/tmoviestart="+moviestart);
int relTime = (int)((now - moviestart) % movie.duration()) ;
System.out.println("time="+relTime+"/treltime="+movie.duration());
movie.setTime(relTime);
movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40);
this.invalidate();
}
Se implementó fácilmente utilizando Movieview.
o puedo darte un tutorial para estas cosas
Aquí está el código para xml:
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/minepic" />
Aquí el minepic es una imagen animada gif, pero después de ejecutar la aplicación solo muestra una imagen estática.
¿Hay alguna solución sobre cómo animar las imágenes .gif en la aplicación de Android?
No es una buena práctica usar Threads (es decir, View.post (nuevo Runnable)) porque la vista podría haber cambiado durante el tiempo en que se dibujará el dibujo (un caso utiliza la imagen animada en ListView con elementos que contienen diferentes imágenes de fondo) , que puede causar una excepción ClassCastException si ImageView, en el momento en que se ejecuta el subproceso, tiene un fondo que no es un recurso animado.
ImageView loadingImg = (ImageView)v.findViewById(R.id.image);
loadingImg.setBackgroundResource(R.drawable.progressdialog);
loadingImg.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
AnimationDrawable loadingAnimation = (AnimationDrawable) v.getBackground();
loadingAnimation.start();
}
@Override
public void onViewDetachedFromWindow(View v) {
}
});
Ejemplo mostrado here
No recomendaría el uso de clases de Movie
o WebView
, sino ImageView
lugar de una fuente dibujable configurada en animation-list
. Mira el ejemplo ( mydrawable.xml
):
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/image_1" android:duration="100" />
<item android:drawable="@drawable/image_2" android:duration="100" />
<item android:drawable="@drawable/image_3" android:duration="100" />
</animation-list>
// in your layout : <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/my_drawable" />
Obviamente, tienes que dividir tu .gif en imágenes separadas antes de usar esta solución.
Para dar una respuesta precisa y completa aquí es lo que necesita hacer paso a paso:
Necesitará tener diferentes imágenes
.png
que actuarán como cuadros para su animación. Guardarlos en la carpetares/drawable
.Cree el archivo
anim.xml
en la carpetares/drawable
con el siguiente contenido:<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/image_3" android:duration="250" /> <item android:drawable="@drawable/image_2" android:duration="250" /> <item android:drawable="@drawable/image_1" android:duration="250" /> <item android:drawable="@drawable/image" android:duration="250" /> </animation-list>
En el archivo
xml
diseño en el que desea mostrar la animación://... <ImageView android:id="@+id/iv_animation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:contentDescription="Animation" /> //...
En el archivo Java que carga el archivo xml de diseño y llama a
setContentView
://... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView animImageView = (ImageView) findViewById(R.id.iv_animation); animImageView.setBackgroundResource(R.drawable.anim); animImageView.post(new Runnable() { @Override public void run() { AnimationDrawable frameAnimation = (AnimationDrawable) animImageView.getBackground(); frameAnimation.start(); } }); // ... other code ... } // ...
Para detener la animación, puede llamar a .stop()
en AnimationDrawable
. Para más detalles sobre los métodos disponibles, puede ver la documentación de AnimationDrawable . Espero que ayude a alguien.
Según tengo entendido, su imagen GIF no se mueve, por lo que ese es el comportamiento nativo de Android si trata a GIF como una imagen estática. Para mí, la mejor solución (¡no reinventar la rueda!) Fue la biblioteca de código abierto github.com/koral--/android-gif-drawable . Verifique su README, todo es muy simple: agregue dependencia para gradle y use (en XML o código). Ejemplo de uso en Java:
GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable.anim );
And i think this is the one way of solution by writing the anim-space.xml
In which the slices of the image are added to the items one by one and setting that xml to the imageview of our layout xml.
developer.android.com/reference/android/graphics/drawable/…
En este enlace de desarrolladores se define claramente.