webView及ScrollView长截图

前言

之前的文章已经讲了X5内核加入到项目中的方式,现在写一下如何在该内核下使用长截图,Android自带的webView也适用改方式。

都是轮子,我直接上代码了,以下是webView的长截图

 private Bitmap captureScreenforRecord(){

        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.RGB_565);

        Canvas bigcanvas = new Canvas(bm);
        Paint paint = new Paint();
        int iHeight = bm.getHeight();
        bigcanvas.drawBitmap(bm, 0, iHeight, paint);
        webView.draw(bigcanvas);
        return  bm;
    }

浏览器截图

image.png

点击screen按钮后跳转至pictureActivity

image.png

正常的webView还有一种截图的方式,

  float scale = webView.getScale();
        int webViewHeight = (int) (webView.getContentHeight()*scale);
        Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(),webViewHeight, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        webView.draw(canvas);

但是在X5 内核的webView不可用,会出现屏幕外为黑屏。在Android5.0以后的webView也可能出现黑色,如下

image.png

需要进行一些处理:

   static {//webView长截图分享在api21以上需要处理
        if(Build.VERSION.SDK_INT >= 21){
            WebView.enableSlowWholeDocumentDraw();
        }
    }

不过在X5内核下以上方法时被屏蔽的,所以不推荐使用,可以在原生的webView中使用,内存消耗会变大。

另外附上ScrollView长截图代码

  float scale = webView.getScale();
        int webViewHeight = (int) (webView.getContentHeight()*scale);
        Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(),webViewHeight, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        webView.draw(canvas);

链接附上 github
CaptureScreenWithTencentX5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,778评论 25 709
  • 作者:Windin 贝聊移动开发部 Android工程师前言:本文主要讲述了以下两个方面: 普通WebView如何...
    贝聊科技阅读 9,546评论 4 18
  • 关于这份调研报告,不是从技术角度深入探索,重点是从产品本身分析,通俗易懂才是重点。主要是为了锻炼平时做技术调研和竞...
    石先阅读 23,634评论 13 48
  • 最基础的使用方法 最简单的布局: 在Activity中使用WebView: 但只是这样的话,在模拟器上是会直接调到...
    HolenZhou阅读 7,855评论 12 33
  • 话说今年五月初,不知道接通了哪根神经,我突然心血来潮想学种菜了。 种菜之前要整地,央求某人一起出地面,镰刀割去半人...
    风轻云淡_106f阅读 414评论 1 2