Изменение ориентации портит настройки аппаратного ускорения - PullRequest
1 голос
/ 30 января 2012

Я разрабатываю приложение с SDK 11 (Honeycomb).В этом приложении я использую аппаратное ускорение (на уровне приложения), чтобы сделать анимацию более плавной, а без нее она неприемлемо вялая.Поскольку мой клиент действительно хочет получить их, я должен найти другое решение, чем отключение ускорения.

Сама проблема в том, что у меня есть Activity, который содержит несколько WebView элементов.3, если быть точным - 1 всегда отображается, а 2 других используются для предварительной загрузки страниц, поэтому они невидимы (я имею в виду, что они расположены за пределами экрана, но все еще «видны»).Я использую анимацию перевода, чтобы «переключаться» между ними.При включенном аппаратном ускорении они неправильно отображают веб-страницы - у меня появляются большие, мерцающие черные квадраты на странице.Это, конечно, неприемлемо, поэтому я обошел проблему, отключив аппаратное ускорение для всех WebView:

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

Я также попытался установить это в XML-файле (android:layerType="software"), но он работал точнотак же (как и должно быть).В любом случае, оба эти метода работают довольно хорошо - анимация и веб-представления достаточно плавные, и нет никаких артефактов.Проблема возникает, однако, как только ориентация меняется.Несмотря на то, что я не делаю важных различий между портретным и ландшафтным режимами в моем коде, он работает следующим образом:

  • Деятельность начинается в портретном режиме, изменяет ориентацию на альбомную, обратно на портретную и т.Все работает как положено.
  • Активность начинается в ландшафтном режиме.Работает нормально.Ориентация меняется на портретную.Артефакты начинают проявляться снова.Чаще всего весь экран просто становится черным с веб-страницей, показывающей один раз в голубой луне, когда я прокручиваю / увеличиваю страницу.Это точно так же, как если бы WebViews использовал аппаратное ускорение.Вернемся к пейзажу - все снова работает нормально.

Это привело меня к мысли, что проблема может быть в аппаратном ускорении.Я был прав, пытаясь установить ускорение программного обеспечения на разных уровнях иерархии представления, чтобы увидеть, прекращается ли это странное поведение.Я обнаружил, что он действительно останавливается и работает без ошибок, но только после того, как вся активность программно ускоряется, что для меня неприемлемо (анимация моего перевода! [+ Медленная прокрутка в веб-просмотрах]).Если только программные представления / группы просмотра в файле XML макета настроены для ускорения программного обеспечения, это по-прежнему приводит к ошибкам.Есть ли что-то в изменениях ориентации, которые могут вызвать такое поведение?Любые решения, хаки, подсказки, предложения, идеи, мысли, пусть и неполные, приветствуются - я вне их.

Если вам нужна дополнительная информация или какой-то код, я с радостью предоставлю его вам.Спасибо за ваше время!

...