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设置点击事件后,设置不可点击不启作用。






一辈子这么长

总得逆袭一次吧

不为别的,只为证明给自己看

证明给那些曾经看低我们的人看

只要我想

我可以活成任何我想要的样子!

希望大家都能活成自己想要的样子~_~