Crosswalk下cordova-screenshot截屏生成黑屏图片

cordova-screenshot插件
XWALK-2233

在Crosswalk(版本10.39.235.16)下使用cordova-screenshot插件截屏,生成的图片为黑屏,与其说是Crosswalk的问题,不如说是cordova-screenshot插件的BUG。

BUG 2233下的讨论,发现Tony Homer已经解决了黑屏的问题,参考他的代码,修改getBitmap()方法,如下:

public class Screenshot extends CordovaPlugin {
    
    private Bitmap getBitmap() {
        Bitmap bitmap = null;
        
        boolean isCrosswalk = false;
        try {
//            Class.forName("org.crosswalk.engine.XWalkWebViewEngine");
            Class.forName("org.xwalk.core.XWalkView"); // 这里
            isCrosswalk = true;
        } catch (Exception e) {
        }
        
        if(isCrosswalk) {
            try {
                
//                TextureView textureView = findXWalkTextureView((ViewGroup)webView.getView());
                TextureView textureView = findXWalkTextureView((ViewGroup)webView); // 这里
                if (textureView != null) {
                    bitmap = textureView.getBitmap();
                    return bitmap;
                }
            } catch(Exception e) {
            }
        } 

//            View view = webView.getView().getRootView();
            View view = webView.getRootView(); // 这里
        view.setDrawingCacheEnabled(true);
        bitmap = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);

        
        return bitmap;
    }
}

另外在config.xml中添加:

<preference name="CrosswalkAnimatable" value="true" />

修改Screentshot.js,原JS文件没有设置插件ID,现在将其ID设置为com.darktalker.cordova.screenshot.ScreenshotPlugin

cordova.define("com.darktalker.cordova.screenshot.ScreenshotPlugin", function (require, exports, module) {

    var exec = require('cordova/exec'),
        cordova = require('cordova'), formats = ['png','jpg'];

    function ScreenshotPlugin() {
    }

    ScreenshotPlugin.prototype = {
            save:function(callback,format,quality, filename) {
                format = (format || 'png').toLowerCase();
                filename = filename || 'screenshot_'+Math.round((+(new Date()) + Math.random()));
                if(formats.indexOf(format) === -1){
                    return callback && callback(new Error('invalid format '+format));
                }
                quality = typeof(quality) !== 'number'?100:quality;
                exec(function(res){
                    callback && callback(null,res);
                }, function(error){
                    callback && callback(error);
                }, "Screenshot", "saveScreenshot", [format, quality, filename]);
            },

            URI:function(callback, quality){
                quality = typeof(quality) !== 'number'?100:quality;
                exec(function(res){
                    callback && callback(null, res);
                }, function(error){
                    callback && callback(error);
                }, "Screenshot", "getScreenshotAsURI", [quality]);

            }
    }

    module.exports = new ScreenshotPlugin();

});

调用插件截屏保存图片:

navigator.screenshot.save(function(error,res){
    if(error){
        console.error(error);
    }else{
        console.log('ok',res.filePath); //should be path/to/myScreenshot.jpg
    }
},'jpg',50,'myScreenShot');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,007评论 25 709
  • 立秋时分,高温还在任性。条件所限,风扇开到最大,噪音也在耳边升到了最大,这让我想安静的看会儿书的心情也一直躁动着。...
    我是Jelly呀阅读 1,684评论 0 0
  • 失眠严重,真羡慕我老婆,可以做到秒睡。 刚才写了篇文章,估计有敏感词,被锁定,不知何为锁定。不过也无所谓,找个没人...
    坐井观天阔阅读 2,286评论 0 0
  • //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪 /**注意:先看效果图-->1.登录融云-->2.生...
    石虎132阅读 6,936评论 5 20
  • spark streaming的程序如果运行方式是yarn client mode,那么如何指定driver和ex...
    Woople阅读 8,933评论 0 2

友情链接更多精彩内容