Intereting Posts
Не удалось прочитать строку 0, столбец 0 из CursorWindow, который имеет 0 строк, 64 столбца Установка Android Studio не указывает на допустимую ошибку установки JVM Ошибка: выполнение выполнено для задачи ': app: transformClassesAndResourcesWithProguardForArmRelease' Может ли кто-нибудь предложить более быструю альтернативу этому алгоритму регулярного выражения? Ошибка версии для Android Studio SDK после обновления Откройте действие или фрагмент с глубоким связыванием нижнего листа Android Studio: Как я могу получить выровненный подписанный выпуск APK? ExpandableListView getChildrenCount не вызывается после изменения данных, что приводит к IndexOutOfBoundsException Как программно отключить датчик приближения Воспроизведение звука определенной частоты в android MapFragment получает темное наложение при использовании в DialogActivity Как установить растровое изображение в холсте моего пользовательского представления? Добавить дополнительную информацию о пользователе с помощью firebase ConstraintLayout не позволит мне установить ограничение, соединяющее представление с краем экрана Обмен фрагментами с помощью hide и show со сдвигом слайдов приводит к исчезновению

Показать .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);

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