是否可以监听WebView页面加载完成,然后捕获已加载页面的屏幕截图?

我尝试了两种方法,但两种方法均无效:

使用WebViewClientonPageFinished(WebView view, String url)


  • 它不起作用(并且在文档中进行了描述),因为Picture此时可能尚未准备好
  • 使用WebView.PictureListeneronNewPicture(WebView view, Picture picture)

  • 它也不能解决问题,因为此方法调用的时间不确定。第一次,图片通常只包含页面内容的一部分。而且我不知道如何确定当前调用在该页面上是最后一次。

  • 我想注意到,问题在于找到合适的时机来制作屏幕截图,而不是如何完成。

    最佳答案

    [请注意,自从我回答这个问题以来,不推荐使用onNewPicture(请参阅http://developer.android.com/reference/android/webkit/WebView.PictureListener.htmlWhat does "This method is deprecated" mean for application developers)。不幸的是,没有关于什么替代它或支持哪种API级别的信息。我想这意味着您自担风险使用此功能。]

    我认为您是正确的,onNewPicture是捕获加载的WeView页面的屏幕截图的正确位置,但也纠正了很难知道何时实际进行捕获的问题。

    似乎只要有任何图形,WebView都会调用onNewPicture。例如,当搜索栏处于键盘输入模式且光标轻拂时,它将重复调用onNewPicture。同样,对于某些网页(例如www.yelp.com/nyc),即使页面完成绘制后,它也会重复调用onNewPicture,这可能是由于“搜索”框中的光标闪烁所致。但在另一种极端情况下,它将仅调用onNewPicture一次(例如,如果用户放下iGoogle项目)。

    因此,没有简单的规则吗?我们采取的方法是

  • 除了onNewPicture
  • 外,还监视涉及/影响页面加载的一系列事件-例如shouldOverrideUrl,onPageFinished,焦点更改,滚动开始/结束
  • 在onNewPicture上运行计时器(2秒运行良好),并通过新的onNewPicture设置
  • 实现了一个页面加载FSM,该页面使用事件和计时器到期作为输入,并通过一系列状态/ Action 转换,以至于确定它真正具有新的外观。

  • 不是很漂亮,但是它可以工作,在极少数情况下它两次捕获同一张图片-并且在任何情况下都无法在应有的位置捕获图片。

    关于android - 从WebView捕获图片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4538429/

    10-10 06:59