studio how android animated-gif

how - Mostrar.gif con android.graphics.Movie



insert gif in android studio (3)

Cargar un GIF animado parece complicado, pero sugeriría usar una vista web como alternativa.

Haz lo siguiente para resolver el problema:

  1. Copia tu GIF en los activos de Android.
  2. Llame a webView.loadDataWithBaseURL ("file: /// android_asset /", "," text / html "," utf-8 ", null);

Espero que ayude !

Estoy intentando, crear una vista con un GIF animado ..

Cuando intento ejecutar el código de seguimiento en el emulador, todo funciona bien. Pero cuando intento ejecutarlo en un teléfono inteligente real, no pasa nada ...

Mi vista:

public class GIFView extends View { private Movie mMovie; private long movieStart; public GIFView(Context context) { super(context); initializeView(); } public GIFView(Context context, AttributeSet attrs) { super(context, attrs); initializeView(); } public GIFView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initializeView(); } private void initializeView() { InputStream is = getContext().getResources().openRawResource( R.drawable.cookies2); mMovie = Movie.decodeStream(is); } protected void onDraw(Canvas canvas) { canvas.drawColor(Color.TRANSPARENT); super.onDraw(canvas); long now = android.os.SystemClock.uptimeMillis(); if (movieStart == 0) { movieStart = (int) now; } if (mMovie != null) { int relTime = (int) ((now - movieStart) % mMovie.duration()); mMovie.setTime(relTime); mMovie.draw(canvas, getWidth() - mMovie.width(), getHeight() - mMovie.height()); this.invalidate(); } }}

Mi actividad:

public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GIFView gifView = new GIFView(this); setContentView(gifView); }}

La captura de pantalla de mi teléfono inteligente: Captura de pantalla de mi emulador:

¿Por qué mi aplicación no se ejecuta en un teléfono inteligente?


No apague la aceleración de hardware para toda la aplicación. Eso es paralizante. Solo apágalo para la vista:

setLayerType(View.LAYER_TYPE_SOFTWARE, null);


No creo que el objeto Película funcione correctamente en dispositivos donde la aceleración de hardware está activada (que está activada de manera predeterminada en Android 4.x para dispositivos compatibles. Es posible que su emulador no lo haga).

Intenta agregar

android:hardwareAccelerated="false"

a la definición de actividad para MainActivity en AndroidManifest.xml

Ejemplo:

<activity android:name=".MainActivity" android:hardwareAccelerated="false" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>