Ole*_*sov 13 android bitmap webview android-canvas
我有一个自定义WebView,我想获得其内容的位图(包括屏幕外).我使用了这个代码,我从这里得到了:
public static Bitmap getBitmapFromWebviewV2(WebView webView) {
webView.measure(View.MeasureSpec.makeMeasureSpec(
View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
webView.layout(0, 0, webView.getMeasuredWidth(),
webView.getMeasuredHeight());
webView.setDrawingCacheEnabled(true);
webView.buildDrawingCache();
Bitmap bm = Bitmap.createBitmap(webView.getMeasuredWidth(),
webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas bigcanvas = new Canvas(bm);
Paint paint = new Paint();
int iHeight = bm.getHeight();
bigcanvas.drawBitmap(bm, 0, iHeight, paint);
webView.draw(bigcanvas);
return bm;
}
Run Code Online (Sandbox Code Playgroud)
当我放大很多时,它工作正常,在这种情况下我得到OutOfMemory Crash.我用相同的图片(略微缩放并缩放到最大值)测试了它,它的行为与我上面提到的相同.
我试图通过添加来解决这个问题
while(webView.canZoomOut()){
webView.zoomOut();
}
Run Code Online (Sandbox Code Playgroud)
在一开始,但它根本没有帮助.
好吧,我自己破解了这个。问题确实在于该函数Bitmap在缩小过程结束之前返回了路径,所以我不得不延迟它。
我合并了
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//bulk of my code
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
这迫使函数的结构从 更改public Bitmap为public void。这是直接相关的线程。尽管我仍然需要修复一些小调整,但这种方法很有魅力
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |