我目前正在开发一个名为 Cornowser 的网页浏览器,它使用 Crosswalk 引擎,但我遇到了一个问题。我想要实现颜色模式,就像 UltimateBrowserProject 中一样。
但是,颜色滤镜无法生效。我尝试设置图层类型,并通过带有颜色滤镜的 Paint
传递它。
以下是源代码:
// Handle color modes
public void drawWithColorMode() {
Logging.logd("Applying web render color mode...");
RenderColorMode.ColorMode cm = CornBrowser.getBrowserStorage().getColorMode();
Paint paint = new Paint();
final float[] negativeColor = {
-1.0f, 0, 0, 0, 255, // Red
0, -1.0f, 0, 0, 255, // Green
0, 0, -1.0f, 0, 255, // Blue
0, 0, 0, 1.0f, 0 // Alpha
};
final float[] darkColor = {
1f, 0, 0, 0, -255,
0, 1f, 0, 0, -255,
0, 0, 1f, 0, -255,
0, 0, 0, 1f, 0
};
final float[] invertColor = {
-1f, 0, 0, 0, 0,
0, -1f, 0, 0, 0,
0, 0, -1f, 0, 0,
0, 0, 0, 1f, 0
};
Logging.logd("Found color mode: " + cm.mode);
switch(cm.mode) {
case RenderColorMode.ColorMode.NORMAL:
Logging.logd("Applying normal color mode");
paint.setColorFilter(null);
break;
case RenderColorMode.ColorMode.DARK:
Logging.logd("Applying dark mode");
paint.setColorFilter(new ColorMatrixColorFilter(darkColor));
break;
case RenderColorMode.ColorMode.NEGATIVE:
Logging.logd("Applying negative mode");
paint.setColorFilter(new ColorMatrixColorFilter(negativeColor));
break;
case RenderColorMode.ColorMode.INVERT:
Logging.logd("Applying inverted mode");
paint.setColorFilter(new ColorMatrixColorFilter(invertColor));
break;
case RenderColorMode.ColorMode.GREYSCALE:
Logging.logd("Applying greyscale");
ColorMatrix m = new ColorMatrix();
m.setSaturation(0);
paint.setColorFilter(new ColorMatrixColorFilter(m));
break;
default:
Logging.logd("Warning: Unknown color mode " + cm.mode + ".");
break;
}
Logging.logd("Setting layer type...");
setLayerType(LAYER_TYPE_HARDWARE, paint);
}
我也尝试了通过覆盖draw(canvas)
,但结果是一样的。
有人知道如何为XWalkView设置颜色过滤器吗?
提前感谢!
更新:
似乎SurfaceView
不支持颜色过滤器。无论如何如何处理?
更新2: 看起来这个问题没有得到太多关注...我编辑了我的源代码,应该可以工作,但它不工作,请检查它,logcat给我以下输出:
D/Cornowser: Applying web render color mode...
D/Cornowser: Found color mode: 2
D/Cornowser: Applying negative mode
D/Cornowser: Setting layer type...
最终更新: 我最终使用JavaScript解决了它。 如果你想知道我是如何解决的,请看这里。