Android浏览器多窗口webview界面截屏心得「建议收藏」

Android浏览器多窗口webview界面截屏心得「建议收藏」做Android浏览器多窗口的时候,需要使用到浏览器的webview快照,当前有三种方法,都尝试过,对第二种方法做了一点改进,整理说一下他们各自的优势:

大家好,又见面了,我是你们的朋友全栈君。

做Android浏览器多窗口的时候,需要使用到浏览器的webview快照,当前有三种方法,都尝试过,对第二种方法做了一点改进,整理说一下他们各自的优势:

方法一:使用该方法截取webview可视部分的截图,如使用当前方法,会截取的是最开始加载的界面,当你的界面刷新后,并不会截取新的界面,而是使用老的界面,所以效果不太好;

/**     * 截取webView可视区域的截图     
* @param webView 前提:WebView要设置
webView.setDrawingCacheEnabled(true);   
* @return     
*/    
private Bitmap captureWebViewVisibleSize(WebView webView){ 
   Bitmap bmp = webView.getDrawingCache(); 
   return bmp;    
}

方法二:截取整个webview的界面,包含未显示的部分;这部分会截取整个webview的大小,由于我模拟的是ipad的模式,所以webview就会很长,而浏览器又是内存大户,故,当遇到截屏的webivew太长的时候,截取出来的bitmap太大,遇到配置低的设备,总是出现oom,后来,对这个方法进行了改造,只是截取显示的内容,见下面方法三;

/**
     * 截取webView快照(webView加载的整个内容的大小)
     * @param webView
     * @return
     */
    private Bitmap captureWebView(WebView webView){

        Picture snapShot = webView.capturePicture();
        
        Bitmap bmp = Bitmap.createBitmap(snapShot.getWidth(),snapShot.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bmp);
        snapShot.draw(canvas);
        return bmp;
    }

方法三:对方法二的改造,通过获取pictrue的宽,算取截屏的高,从而截取只是显示出来的部分,我使用的这个方法:

/**
     * 截取webView快照(webView加载的整个内容的显示部分大小)
     * @param webView
     * @return
     */
    private Bitmap captureWebView(WebView webView){

        Picture snapShot = webView.capturePicture();

Bitmap bmp = null;
        int width = picture.getWidth();
        int height = (int) (width * 9 / 16);//默认16:9的设备比例,算出截屏的高

       if (width > 0 && height > 0)
        {

        bmp = Bitmap.createBitmap(width ,height , Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bmp);
        snapShot.draw(canvas);

}
        return bmp;
    }

方法四:方法四就是Android的截屏操作了,没有使用的原因是,我的浏览器界面在webview上还有控件,使用该方法会把多余的非webview的部分截取出来,故没有使用该方法:

/**
     * 截屏
     * @param context
     * @return
     */
    private Bitmap captureScreen(Activity context){

      View cv = context.getWindow().getDecorView();
      Bitmap bmp = Bitmap.createBitmap(cv.getWidth(), cv.getHeight(),Config.ARGB_8888);
      Canvas canvas = new Canvas(bmp);
      cv.draw(canvas);
      return bmp;
      }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146725.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Oracle Number 自动转Decimal问题修正「建议收藏」

    Oracle Number 自动转Decimal问题修正「建议收藏」spark加载Oracle表的Number字段,直接写入关系表会被转成decimal双精度类型解决方式:1.构建Jdbc会话publicclassJdbcOracleDialectextendsJdbcDialect{@OverridepublicbooleancanHandle(Stringurl){returnurl.startsWith(“jdbc:oracle”);}@Overrid…

  • python控制灯_树莓派python编程 做一个LED呼吸灯「建议收藏」

    呼吸灯概述上一篇我们通过控制GPIO口输出高低电平来控制一只LED的亮灭。这次我们来控制LED的亮度,灯由暗渐渐变亮,再由亮渐渐边暗,反复循环,也就是呼吸灯的效果。按Ctrl+C结束程序。通过本节课,你能学习到:脉冲宽度调制技术所需硬件树莓派x1面包板x1杜邦线x2LED灯x1名称解释我们知道,通过LED的电流越大,LED越亮,电流越小,LED越暗。如果可以控制输出电流大小就可…

  • 前端开发电脑配置(做前端用什么笔记本电脑)

    我们在刚入职的时候,公司会让我们自己来配置电脑。下面是一些实用性的软件。1.VisualStudioCode这是我们前端开发人员相对来说最多使用的代码编辑器了,可以下载各种插件来辅助我们编写代码。下载链接:https://code.visualstudio.com/.2.Chrome浏览器谷歌浏览器,是目前最全面的浏览器,对我们写的代码非常友好,包括也支持各种各样的插件。下载链接:https://www.google.cn/chrome/.注:我这个是安装了csdn出品的插件

  • 第五章《函数》

    第五章《函数》

  • Python报错:pandas.errors.ParserError: Error tokenizing data. C error: Expected 3……

    Python报错:pandas.errors.ParserError: Error tokenizing data. C error: Expected 3……报错信息用Python做数据处理时,报如下错误:pandas.errors.ParserError:Errortokenizingdata.Cerror:Expected3fieldsinline28,saw4错误原因首先我们先看一下报错:pandas.errors.ParserError:Errortokenizingdata.Ce…

  • linux sigpipe信号,Linux下SIGPIPE信号及其处理「建议收藏」

    linux sigpipe信号,Linux下SIGPIPE信号及其处理「建议收藏」在Linux下写socket的程序的时候,如果尝试send到一个disconnectedsocket上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:structsigactionsa;sa.sa_handler=SIG_IGN;sigaction(S…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号