Ошибка Android Flicker Android во время анимации просмотра на устройстве

Я пытаюсь внедрить слайд-навигацию (приложения a la Facebook, Path или Google+ для Android). Полный источник для воспроизведения этой ошибки можно найти здесь .

Однако при анимации WebView на экране, на устройстве происходит мерцание, как будто устройство откусывает мой WebView непосредственно перед тем, как оттолкнуть его от экрана.

Меню навигации навигатора WebView IN (устройство)

Артефакт не возникает на эмуляторе! Анимация продолжается гладко.

Меню навигации навигатора WebView IN (эмулятор)

Интересно, что это мерцание, похоже, происходит только тогда, когда анимированный вид – это WebView ! Вот тот же проект с использованием TextView в качестве основного содержимого.

Меню навигации слайдов TextView IN (устройство)

Макет для активности веб-просмотра:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/blue" > <WebView android:id="@+id/web_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout> 

А для активности просмотра текста:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/blue" > <TextView android:id="@+id/web_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello there. no flicker!" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout> 

Код, вызываемый для перемещения навигационного меню в:

  private void slideIn() { LinearLayout actionBarFrame = (LinearLayout) findViewById(android.R.id.content).getParent(); LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); menuView = inflater.inflate(R.layout.menu, null); menuView.setLayoutParams(new FrameLayout.LayoutParams(SIZE, LayoutParams.MATCH_PARENT, Gravity.LEFT)); FrameLayout decorView = (FrameLayout) getWindow().getDecorView(); decorView.addView(menuView); decorView.bringChildToFront(actionBarFrame); FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) actionBarFrame.getLayoutParams(); params.setMargins(SIZE, 0, -SIZE, 0); actionBarFrame.setLayoutParams(params); TranslateAnimation ta = new TranslateAnimation(-SIZE, 0, 0, 0); ta.setDuration(DURATION); actionBarFrame.startAnimation(ta); } 

И чтобы сместить его обратно:

  private void slideOut() { LinearLayout actionBarFrame = (LinearLayout) findViewById(android.R.id.content).getParent(); FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) actionBarFrame.getLayoutParams(); params.setMargins(0, 0, 0, 0); actionBarFrame.setLayoutParams(params); TranslateAnimation ta = new TranslateAnimation(SIZE, 0, 0, 0); ta.setDuration(DURATION); ta.setAnimationListener(new AnimationListener() { @Override public void onAnimationEnd(Animation arg0) { ((FrameLayout) getWindow().getDecorView()).removeView(menuView); menuView = null; } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationStart(Animation arg0) { } }); actionBarFrame.startAnimation(ta); } 

Я загрузил код в BitBucket в качестве публичного репо, чтобы вы могли попробовать этот проект точно так же, как и я.

Любая помощь или идеи о том, почему это происходит или как это исправить, будем очень благодарны! Желательно, чтобы плавный анимировать WebView из изображения и обратно. Спасибо!

Вообще говоря, кажется, что проблема связана с ошибкой при использовании WebViews с аппаратным ускорением, включенным на устройствах с поддержкой 3.0+. Я также пробовал использовать библиотеку скользящих меню с помощью WebView но испытывал такую ​​же WebView проблему. Осмотревшись, я нашел обходное решение:

WebView «мигает» на белом фоне, если аппаратное ускорение включено (Android 3.0+)

Обходной путь использует следующий код для установки типа слоя WebView для рендеринга программного обеспечения:

 webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Этот код разрешил мерцание для меня с недостатком более низкой производительности.

Intereting Posts
Синхронизация градиента Android Studio не удалось найти в библиотеке Ошибка при получении информации с сервера RPC: s-7: AEC-0 в игре Google? Кнопка «Показать маршруты» в Карте Google, когда информационное окно открывается программно У эмулятора AVD нет возможности синхронизации с Google Calendar Как увеличить скорость создания приложений для Android Studio? Как вернуть значение из потока в java? Хорошая схема для удаления файла базы данных в SQLiteOpenHelper.onDowngrade () Не удается показать список Spinner DropDown внутри AlertDialog – Android Программный запуск активности «Добавить учетную запись» в Android 2.2 «Android.view.View не может быть исключен из исключения android.view.ViewGroup» Получение исключения Null указателя при захвате и сохранении изображения с использованием эмулятора Android Весна для Android, прогресс загрузки файлов Размер каталога Android Переход на Camera2 в Android Vision API Mapbox Android определяет уровень масштабирования, содержащий все маркеры