Показать .gif с android.graphics.Movie

Я пытаюсь, создаю представление с анимированным GIF.

Когда я пытаюсь запустить следующий код в эмуляторе, все работает нормально. Но когда я пытаюсь запустить настоящий смартфон, ничего не происходит.

Мой взгляд:

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(); } }} 

Моя деятельность:

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

Снимок экрана моего смартфона: Мой снимок экрана для смартфонов Снимок экрана моего эмулятора: Мой скриншот эмулятора

Почему мое приложение не работает в смартфоне?

    Не выключайте аппаратное ускорение для всего приложения. Это калечит. Просто отключите его для просмотра:

     setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

    Я не думаю, что объект Movie работает правильно на устройствах, на которых включено аппаратное ускорение (которое по умолчанию включено в Android 4.x для устройств, которые его поддерживают. Возможно, ваш эмулятор не работает).

    Попробуйте добавить

      android:hardwareAccelerated="false" 

    К определению активности для MainActivity в AndroidManifest.xml

    Пример:

     <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> 

    Загрузка анимированного GIF кажется сложной, но я бы предложил использовать WebView в качестве альтернативы.

    Для решения проблемы выполните следующие действия:

    1. Скопируйте свой GIF в Android-активах.
    2. Вызовите webView.loadDataWithBaseURL ("file: /// android_asset /", "", "text / html", "utf-8", null);

    Я надеюсь, что это помогает !