如何使用onDraw(Canvas)获取Android WebView的位图快照

3

我曾经使用capturePicture()方法来对我的WebView进行快照。但是这个方法在API 19级别被弃用了。

文档说“使用onDraw(Canvas)来获取WebView的位图快照”,但我真的不知道它是什么意思。

请问你能教我如何解决这个问题吗?


只需调用webView.onDraw(canvas)。 - pskink
谢谢!但是onDraw(canvas)是受保护的。我不能直接调用它。而且它不返回任何东西。 - Richard Guan
扩展WebView并从中调用,使用由new Canvas(Bitmap)创建的画布。 - pskink
像这样吗?Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444); this.draw(new Canvas(bitmap)); - Richard Guan
mWebView.getWidth() 和 mWebView.getHeight(),事实上我需要的是 mWebView.getWidth() 和 mWebView.getContentHeight()。 - Richard Guan
显示剩余3条评论
1个回答

4
以下内容应该可以正常工作:
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);

3
您是在询问您的方法是否能够完全捕获webview还是只能捕获可见部分?我的意思是,如果web内容非常长,您的方法是否可以将全部内容都捕获到? - lolyoshi
@lolyoshi WebView.draw() 确实可以捕获所有内容,但我不确定 WebView.getWidth() 是否会返回内容的正确宽度,我仍然需要为我正在开发的应用程序进行检查。 - JAB
是的!使用 getContentHeight() * getScale() 可以捕获整个页面,而不仅仅是可见内容。 - Pioneer
1
在Android 6.0上,它不会捕获整个视图,而只是可见部分。 - Patrick
getScale() 已被弃用 - Abhay Sood
内存不足异常。有人能帮忙吗?我只需要捕获可见区域。另外,getScale()已被弃用。 - Surinder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接