studio glide app android gif animated-gif

glide - Juega la imagen Gif descargada en Android



glide android (3)

Después de algunas investigaciones, parece que la mejor solución (o la más fácil) es utilizar una vista web:

ej:

ponga el archivo myAnimatedGif.gif en la carpeta de activos.

crear una vista web xml:

<WebView android:id="@+id/myWebView" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

a continuación, cargue el archivo gif en la vista web:

WebView view = (WebView) findViewById(R.id.myWebView); view.loadUrl("file:///android_asset/myAnimatedGif.gif");

Disfrutar

Otra solución es usar este tipo de biblioteca: https://github.com/koral--/android-gif-drawable

Estoy descargando una imagen GIF en mi aplicación desde el servidor y luego la estoy mostrando con ImageView pero no estaba animada. ¿Hay alguna otra forma de reproducir imágenes GIF animadas descargadas? Gracias por adelantado .


Estoy usando la vista personalizada a continuación en lugar de la vista de imagen.

public class SampleView extends View { private Movie mMovie; private long mMovieStart; public SampleView(Context context) { super(context); setFocusable(true); java.io.InputStream is; is = context.getResources().openRawResource(R.drawable.girl_dances); mMovie = Movie.decodeStream(is); } public SampleView(Context context, AttributeSet attrSet) { super(context, attrSet); setFocusable(true); java.io.InputStream is; is = context.getResources().openRawResource(R.drawable.girl_dances); mMovie = Movie.decodeStream(is); } public SampleView(Context context, AttributeSet attrSet, int defStyle) { super(context, attrSet, defStyle); setFocusable(true); java.io.InputStream is; is = context.getResources().openRawResource(R.drawable.girl_dances); mMovie = Movie.decodeStream(is); } @Override protected void onDraw(Canvas canvas) { canvas.drawColor(0x00000000); Paint p = new Paint(); p.setAntiAlias(true); long now = android.os.SystemClock.uptimeMillis(); if (mMovieStart == 0) { // first time mMovieStart = now; } if (mMovie != null) { int dur = mMovie.duration(); if (dur == 0) { dur = 1000; } int relTime = (int) ((now - mMovieStart) % dur); mMovie.setTime(relTime); mMovie.draw(canvas, getWidth() / 2 - mMovie.width() / 2, getHeight() / 2 - mMovie.height() / 2); invalidate(); } } }

Diseño XML:

<com.test.sample.SampleView android:id="@+id/gif_view" android:layout_width="wrap_content" android:layout_height="wrap_content" />


Puedes lograr esto con un WebView. Esto es lo que uso:

Un LinearLayout personalizado que ancla una clase de WebView

import android.view.View; import android.webkit.WebView; import android.widget.LinearLayout; import android.widget.TextView; public class Spinner extends LinearLayout{ public Spinner(Context context) { super(context); // TODO Auto-generated constructor stub View.inflate(context, R.layout.spiner, this); WebView web = (WebView) findViewById(R.id.web); web.loadUrl("file:///android_asset/booting.gif"); } public void setText(String text){ TextView t = (TextView) findViewById(R.id.txtloading); t.setText(text); } public void refresh(){ WebView web = (WebView) findViewById(R.id.web); web.loadUrl("file:///android_asset/booting.gif"); } }

El archivo XML R.layout.Spinner:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center|center_vertical" android:padding="10dp"> <WebView android:id="@+id/web" android:layout_width="24dp" android:layout_height="12dp" /> <TextView android:id="@+id/txtloading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Loading..." /> </LinearLayout>

Se puede usar como

Spinner spinner = new Spinner(this); myContainer.addView(spinner);

Puede llamar a refresh on spinner para garantizar la reproducción de la imagen:

spinner.refresh();

Espero que ayude.