[Android新手提醒]
我需要在BitMap中捕获WebView的内容,我遇到了一个奇怪的问题.我的方法是使用WebView注册WebViewClient,在onPageFinished中我调用capturePicture.使用简单的URL(例如http://www.yahoo.com),它可以正常工作.在其他情况下,capturePicture返回一个高度和宽度值= 0的图片.无论哪种方式,页面加载都很好.我必须使用的实际网址有相当多的url参数,我最初认为有任何参数是问题,但事实并非如此.这里有一些示例网址,其中包含指示是否有效的注释:
w.loadUrl(" http://www.yahoo.com "); //是
w.loadUrl(" http://search.yahoo.com/search?p=android "); //通常不是???
w.loadUrl(" http://www.yahoo.com?foo=bar "); // 不
w.loadUrl(" http://www.google.com "); //是的
w.loadUrl(" http://www.google.com?q=android "); //是的
w.loadUrl(" http://www.google.com?foo=bar "); //是的
第二种情况特别令人沮丧,因为它似乎不起作用.但是,如果我首先使用#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 }
有没有人遇到过这个问题?希望我只是一个白痴,有一个简单的解决方案或解决方法?
我刚刚再次访问了文档页面.[here] [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)