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;
      }

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 遭遇mysql数据库表满错误

    遭遇mysql数据库表满错误

    2021年8月20日
    63
  • 代理重加密算法_凯撒密码采用三重加密技术

    代理重加密算法_凯撒密码采用三重加密技术1、研究背景作用:密文云数据动态共享基于用户数据隐私性考虑,用户存放在云端的数据都是加密形式存在的。而云环境中存在着大量数据共享的场景。由于数据拥有者对云服务提供商并不完全信任,不能将解密密文的密钥发送给云端,由云端来解密并分享出去。数据拥有者自己下载密文解密后,再用数据接收方的公钥加密并分享,无疑给数据拥有者带来很大的麻烦,同时也失去了云端数据共享的意义。代理重加密可以在不泄漏数据拥…

    2025年10月13日
    3
  • Python 从菜鸟到大咖的必经之路「建议收藏」

    目录一、模块和包1.1模块的基础知识1.2模块的导入1.3使用第三方模块1.4包二、文件和目录操作2.1open()函数——打开文件并返回文件对象2.2文件操作的常用方法2.3应用三、面向对象3.1面向对象基础语法3.2初始化方法__init__3.3属性查找与绑定方法3.4案例3.4.1跑步案例3.4.2家具案例3.5私有属性3.6继承3.6.1面向对象的三大特性3.6.2单继承3.6.2.1继承的概念3.6.2.2继承的语法3.6.2.3方法的重写3.6.2.4

    2022年4月11日
    45
  • Python分析和实现基于用户和Item的协同过滤算法

    Python分析和实现基于用户和Item的协同过滤算法打开微信扫一扫,关注《搜索与推荐Wiki》1:协同过滤算法简介2:协同过滤算法的核心3:协同过滤算法的应用方式4:基于用户的协同过滤算法实现5:基于物品的协同过滤算法实现一:协同过滤算法简介关于协同过滤的…

    2022年6月18日
    34
  • eclipse代码自动补全设置_eclipse怎么运行安卓项目

    eclipse代码自动补全设置_eclipse怎么运行安卓项目打开Eclipse->Window->Perferences->Java->Editor->Content,最下面一栏auto-Activation会看到只有一个”.”存在。表示:只有输入”.”之后才会有代码提示,我们要修改的地方就是这里,可是Eclipse默认只允许输入4个自定义字符。先把上图中”.”的地方输入几个随便的字符,例如”aaaa…

    2022年10月15日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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