WebView 截图实现
来源:互联网 发布:苹果5刷机软件 编辑:程序博客网 时间:2024/06/03 16:45
一、WebView的基础设置
对WebView进行基础设置,实现WebView加载数据。
/** * 允许webkit执行js代码 */ webSettings.setJavaScriptEnabled(true); /** *设置缓存模式 */ webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); /** * 设置为true表示支持使用js打开新的窗口 */ webSettings.setJavaScriptCanOpenWindowsAutomatically(true); /** * 网页需要保存一些数据时候,设置以下属性 */ webSettings.setDomStorageEnabled(true); /** * 设置为使用webview推荐的窗口 */ webSettings.setUseWideViewPort(true); /** * 设置适应屏幕大小 */ webSettings.setLoadWithOverviewMode(true); /** * 设置是否启用地理位置 */ webSettings.setGeolocationEnabled(true); /** * 缩放功能是否使用 */ webSettings.setBuiltInZoomControls(false); /** * 设置网页渲染优先级 */ webSettings.setRenderPriority(RenderPriority.HIGH); /** * 设置水平滚动条 */ webview.setHorizontalScrollBarEnabled(false); /** * 设置垂直滚动条 */ webview.setVerticalScrollbarOverlay(true); /** * 设置滚动条的样式 */ webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); /** * 重写WebChromeClient监听网页加载的进度 */ webview.setWebChromeClient(new WebChromeClient()); /** * 重写WebViewClient可以监听网页的跳转和资源加载等等 */ webview.setWebViewClient(new WebViewClient());
二、WebView的截图实现
WebView截图有两种:
1,截屏当前正在显示区域;
2,截屏已经显示的整个页面,形成长图。
截图当前屏幕:
webview.setDrawingCacheEnabled(true);webview.buildDrawingCache();Bitmap bitmap = webview.getDrawingCache();/***保存图片操作*/webview.setDrawingCacheEnabled(false);
注意点:1,截图保存完成后,必须设置setDrawingCacheEnabled(false),便于刷新缓存,实现依据滑动区域截图;
2,截图保存完成后,才设置setDrawingCacheEnabled(false),否则截图为空白。
保存长图:
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();new Handler().postDelayed(new Runnable() { @Override public void run() {//延时保存图片 Bitmap bitmap = BitmapUtil.convertViewToBitmap(webview, webview.getMeasuredWidth(), webview.getMeasuredHeight()); Canvas canvas = new Canvas(bitmap); // 画布的宽高和 WebView 的网页保持一致 Paint paint = new Paint(); canvas.drawBitmap(bitmap, 0, webview.getMeasuredHeight(), paint); webview.draw(canvas); //保存bitmap }}, 300);其中工具类方法为:
public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int bitmapHeight) { Bitmap bitmap = null; try { bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Config.ARGB_4444); view.draw(new Canvas(bitmap)); } catch (OutOfMemoryError ooe) { System.gc(); return bitmap; } return bitmap; }图片保存完毕,勿忘刷新图库,便于直接查看截图:
//刷新图库Uri uri = Uri.fromFile(new File(fileDestUri));sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
三、WebView截图实现中的坑
1,在截屏当前页中,如果当前WebView加载内容含有大量异步加载图片的情形,截图在三星 s7系列会出现中间图片截图不包含的情形;【换开源截图方法实现】
2,截长图中,会出现截图空白。截图主要使用webView缓存,WebView优先加载可显示区域,所以,刷新页面完善后,需要延迟一会在执行截图操作。截图按钮添加不可使用性,在加载完成后,开延时让其可用。
3,截图一般弹框将截图图片分享,会出现分享弹框消失,WebView不可以滑动。可以在弹框消失时,设置webView滚动一定距离,重置webView属性。
实际项目中,为了能够实现效果,会做一些代码上的补贴。这是自己踩过的坑,如果有更好的解决方法,期许和大家交流,完善。
四、细节注意点
imageView.setClickable(false);imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {...}}设置不可点击不启用,因为源码中有:
public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } getListenerInfo().mOnClickListener = l;}即是:
ImageView设置点击事件后,设置不可点击不启作用。
一辈子这么长
总得逆袭一次吧
不为别的,只为证明给自己看
证明给那些曾经看低我们的人看
只要我想
我可以活成任何我想要的样子!
希望大家都能活成自己想要的样子~_~
阅读全文
0 0
- WebView 截图实现
- android webview 截图快照
- 如何对webview进行截图
- WebView 生成长图,截图
- webView截图保存到本地
- Android webView显示完成后截图
- WebView文档截图的一个思路
- Android之WebView网页滚动截图
- webview长截图与短截图+滑动控件ScrollView长截图保存在本地
- delphi实现屏幕截图
- VC实现屏幕截图
- Android截图代码实现
- Android 截图实现(2)
- C# 实现屏幕截图
- C# 实现屏幕截图
- winform实现截图
- 截图功能的实现
- Android截图代码实现
- Git部分知识小结
- 170913_算法导论学习(一)_2.1 插入排序
- C语言笔记——指针
- shader学习笔记<一>: 属性及变量声明
- 备忘录模式,反射
- WebView 截图实现
- ffmpeg八大模块及常用函数介绍
- linux下的静态库和动态库
- Cache for MIPS
- Springmvc返回json数据
- 正则表达式全部符号解释
- 【模拟】HDU1035Robot Motion
- 利用FFmpeg玩转Android视频录制与压缩
- python2.x 和 python3.x的区别汇总