Android WebView截取长图
前言
再一次完善App功能时,由于使用了富文本来完成安卓APP的markdown语法支持,故用来常用的开源库,但是后面就遇到了第一个坑,首先绝大部分都是采用HTML来解析和显示预览,与PC端的解析流程相似,所以后续为了让页面可以分享出去,类似笔记软件的分析图片功能,起初想的是直接讲webView直接截图,保存为图片分享,在最开始的实验中,表现非常良好,但是遗漏了很重要的地方,就是整个页面很长的情况,直接GG,只有在屏幕显示的区域是有图片,在屏幕未显示区域为白色,瞬间傻眼,连忙查阅资料,搜寻,功夫不负有心人,不是我一个人出状况,查阅到一篇类似的文章,连忙测试,下面附上解决方案。
在android5.0及以上版本使用webView进行截长图时,默认是截取可是区域内的内容.因此需要在支撑窗体内容之前加上如下方法.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
WebView.enableSlowWholeDocumentDraw();
}
//在设置布局xml文件之前
setContentView(R.layout.activity_webview);
以下是我的解决方案
/**
* 自定义弹窗 ,提示用户正在截图
*/
protected void createWebCapture(WebView webView) {
//初始化弹窗
final ProgressDialog pd = new ProgressDialog(this);
//设置标题
pd.setTitle(R.string.text_capturing);
//设置不可取消
pd.setCancelable(false);
//弹窗显示
pd.show();
//异步线程 调用截图方法
new Handler().postDelayed(() -> createType2(webView, pd), 500);
}
/**
* 截图初始化
* webView: 控件
* pd: 弹窗
*/
private void createType1(WebView webView,ProgressDialog pd) {
//设置画布为webView
Picture picture = webView.capturePicture();
int width = picture.getWidth();
int height = picture.getHeight();
Bitmap bitmap = null;
if (width > 0 && height > 0) {
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
picture.draw(canvas);
}
try {
saveImageToGallery(this, bitmap, true);
bitmap.recycle();
} catch (Exception e) {
Log.e("ShowArtActivity",e.getMessage());
}
if (pd != null && pd.isShowing()) {
Toast.makeText(ShowArtActivity.this, "图片保存成功", Toast.LENGTH_LONG).show();
pd.dismiss();
}
}
/**
* 捕获Web视图
* @param webView web视图
* @param pd 弹窗
*/
private void createType2(WebView webView,ProgressDialog pd) {
float scale = webView.getScale();
int webViewHeight = (int) (webView.getContentHeight() * scale + 0.5);
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webViewHeight, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
try {
saveImageToGallery(this, bitmap, true);
bitmap.recycle();
} catch (Exception e) {
Log.e("ShowArtActivity",e.getMessage());
}
if (pd != null && pd.isShowing()) {
Toast.makeText(ShowArtActivity.this, "图片保存成功", Toast.LENGTH_LONG).show();
pd.dismiss();
}
}
版权属于:Monster_4y
本文链接:https://blog.zmonster.top/40.html
转载时须注明出处及本声明