Подтвердить что ты не робот

WebView.draw() не работает должным образом над последним обновлением системы Android WebView

В настоящее время я использую WebView.draw(), чтобы сделать снимок экрана всего WebView и сохранить его в Bitmap (основанном на этом решении). До сих пор он работал отлично.

Недавно я тестировал эту функциональность на Nexus 5 (обратите внимание, что на Nexus 5 рассматриваемый WebView больше экрана, поэтому пользователь может прокручивать как по горизонтали, так и по вертикали), используя Lollipop 5.1 и последнее обновление Android System WebView (версия 42.0.2311.137 в момент написания), когда я заметил, что сгенерированное растровое изображение было неправильным. Он имел правильные размеры, но вместо того, чтобы показывать весь WebView, он только имел часть WebView, которая была видна пользователю при вызове метода.

Я попытался удалить все обновления в Android System WebView (таким образом вернув его обратно в версию 39 (1743759) и с версией factory функциональность работает нормально. Поэтому эта проблема связана с относительно недавним обновлением Android System WebView. Мне не удалось найти журнал изменений, поэтому я не могу понять, что изменилось и как его исправить. Ниже приводится краткое визуальное объяснение:

Кто-нибудь еще столкнулся с этой проблемой и нашел возможное решение?

4b9b3361

Ответ 1

Перед созданием любых WebViews необходимо вызвать WebView.enableSlowWholeDocumentDraw(). То есть, если у вас есть какие-либо WebViews в вашем макете, убедитесь, что вы вызываете этот метод перед вызовом setContentView() в onCreate().