Как использовать onDraw(Canvas) для получения растрового снимка WebView(Android)

Раньше я использовал метод capturePicture(), чтобы сделать снимок моего WebView. Этот метод устарел на уровне API 19.

В документе говорится, что «используйте onDraw (Canvas) для получения растрового снимка WebView», но я действительно не знаю, что это значит.

Не могли бы вы научить меня, как решить проблему?


person Richard Guan    schedule 08.11.2013    source источник
comment
просто вызовите webView.onDraw(холст)   -  person pskink    schedule 08.11.2013
comment
Спасибо! Но onDraw(canvas) защищен. Я не могу просто назвать это. И ничего не возвращает.   -  person Richard Guan    schedule 08.11.2013
comment
расширьте WebView и вызовите его оттуда, используйте Canvas, созданный новым Canvas (Bitmap)   -  person pskink    schedule 08.11.2013
comment
Так? Растровое изображение = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444); this.draw (новый холст (растровое изображение));   -  person Richard Guan    schedule 09.11.2013
comment
Я делаю только пустое изображение...   -  person Richard Guan    schedule 09.11.2013
comment
каковы размеры растрового изображения?   -  person pskink    schedule 09.11.2013
comment
mWebView.getWidth() и mWebView.getHeight(), на самом деле мне нужны mWebView.getWidth() и mWebView.getContentHeight()   -  person Richard Guan    schedule 10.11.2013
comment
Спасибо! Я исправил ошибку.   -  person Richard Guan    schedule 11.11.2013


Ответы (1)


Следующее должно работать:

float scale = webView.getScale();
int webViewHeight = (int)(webView.getContentHeight() * scale);
Bitmap image = Bitmap.createBitmap(webView.getWidth(), webViewHeight, Config.ARGB_8888);
Canvas canvas = new Canvas(image);
webView.draw(canvas);
person Richard Guan    schedule 11.11.2013
comment
Вы захватываете весь веб-просмотр или только то, что видно? Я имел в виду, что если веб-контент длинный, может ли ваш метод захватить все целиком? - person lolyoshi; 06.01.2014
comment
@lolyoshi WebView.draw() действительно захватит весь контент, но я не уверен, что WebView.getWidth() вернет правильную ширину для контента, мне все еще нужно проверить это для приложения, над которым я работаю. - person JAB; 08.03.2014
comment
Да! Использование getContentHeight() * getScale() захватывает всю страницу, а не только видимый контент. - person Pioneer; 20.03.2015
comment
В Android 6.0 он НЕ захватывает весь вид, а только видимую часть. - person Patrick; 23.11.2015
comment
getScale() устарела - person Abhay Sood; 25.11.2015
comment
Исключение нехватки памяти. кто-нибудь может помочь, пожалуйста. Мне просто нужно захватить видимую область. Также getScale() устарел - person Surinder; 02.02.2016