[Android新手提醒]
我需要在BitMap中捕获WebView的内容,但我遇到了一个奇怪的问题。我的方法是使用WebView注册WebViewClient,在 onPageFinished 中调用 capturePicture 。使用简单的网址(例如http://www.yahoo.com),它可以正常工作。在其他情况下,capturePicture返回一个高度和宽度值= 0的图片。无论哪种方式,页面加载都很好。我必须使用的实际网址有相当多的url参数,我最初认为有任何参数是问题,但事实并非如此。以下是一些示例网址,其中包含指示其是否有效的注释:
第二种情况特别令人沮丧,因为它似乎不起作用。但是,如果我首先使用#5运行测试应用程序,然后将URL切换到#2并运行它然后工作。
以下是我创建的实际简化测试的片段:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
w = new WebView(this);
w.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView webview, String url) {
Picture picture = webview.capturePicture();
Log.d("Height", "" + picture.getHeight());
Log.d("Width", "" + picture.getWidth());
Bitmap b = Bitmap.createBitmap(picture.getWidth(), picture
.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
picture.draw(c);
}
});
w.getSettings().setJavaScriptEnabled(true);
setContentView(w);
//w.loadUrl("http://www.yahoo.com"); //yes
w.loadUrl("http://search.yahoo.com/search?p=android"); // usually not???
//w.loadUrl("http://www.yahoo.com?foo=bar"); // nope
//w.loadUrl("http://www.google.com"); // yep
//w.loadUrl("http://www.google.com?q=android"); // yep
//w.loadUrl("http://www.google.com?foo=bar"); // yes
}
有没有人遇到过这个问题?希望我只是一个白痴,有一个简单的解决方案或解决方法?
答案 0 :(得分:8)
我刚刚再次访问了文档页面。
[这里] [1]
“通知主机应用程序页面已完成加载。此方法仅针对主框架调用。当调用onPageFinished()时,渲染图片可能不尚未更新。新图片的通知,使用onNewPicture(WebView,图片)。“
二手图片监听器,我尝试了你的样品,它的工作原理
希望这会有所帮助。
我刚刚将以下代码添加到您的示例中并删除了WebViewClient
w.setPictureListener(new PictureListener(){
public void onNewPicture(WebView view, Picture picture) {
Log.d(TAG, "onNewPicture- Height"+ picture.getHeight());
Log.d(TAG, "onNewPicture- Width"+ picture.getWidth());
}
});
[1]:http://developer.android.com/reference/android/webkit/WebViewClient.html#onPageFinished(android.webkit.WebView,java.lang.String)