是否可以监听WebView页面加载是否已完成,然后捕获已加载页面的屏幕截图?
我尝试了两种方法,但它们都不起作用:
使用WebViewClient
和onPageFinished(WebView view, String url)
它不起作用(并在文档中描述),因为图片可能还没有准备就绪
使用WebView.PictureListener
和onNewPicture(WebView view, Picture picture)
它也没有解决问题,因为这种方法调用不确定的时间。第一次,图片通常只包含部分页面内容。而且我不知道如何判断当前的呼叫是否为该页面的最后一次。
我想注意,问题是要找到合适的时机来制作屏幕截图,而不是如何完成。
答案 0 :(得分:5)
[请注意,自从我回答此问题后,onNewPicture已被弃用(请参阅http://developer.android.com/reference/android/webkit/WebView.PictureListener.html和What does "This method is deprecated" mean for application developers)。遗憾的是,没有关于替换它的内容或支持的API级别的信息。我想这意味着你自己承担风险。]
我认为你是正确的,onNewPicture是捕获加载的WeView页面截图的正确位置,但也纠正了很难知道何时实际进行捕获。
似乎只要有任何绘图,WebView就会调用onNewPicture。例如,当搜索栏处于键盘输入模式且光标轻弹时,它会重复调用onNewPicture。类似地,对于某些网页(例如www.yelp.com/nyc),即使在页面完成绘制之后,它也会反复调用onNewPicture,这可能是因为搜索框中闪烁的光标。但在另一个极端,它只会调用onNewPicture一次(例如,如果用户放下iGoogle项目)。
所以没有简单的规则吗?我们采取的方法是
不漂亮,但它很有效,极少数情况下它会捕获相同的图片两次 - 并且没有它无法捕捉图片的情况。