gpt4 book ai didi

android - Android 4.1.1 上的 ComposeShader 问题

转载 作者:可可西里 更新时间:2023-11-01 18:45:43 33 4
gpt4 key购买 nike

我只是想为我的 android 应用程序实现一个颜色选择器,并在 Android 4.1.1 上遇到了一个奇怪的问题。以下代码不会在 Android 4.1.1 上创建预期的渐变,但会在 2.3.7 上创建:

Shader fadeInRight = new LinearGradient(0, 0, pWidth, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP);
Shader blackToWhite = new LinearGradient(0, 0, 0, pHeight, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP);
Shader whiteMask = new ComposeShader(blackToWhite, fadeInRight, PorterDuff.Mode.DST_IN);
Shader blackToColor = new LinearGradient(0, 0, pWidth, 0, 0xFF000000, hue, Shader.TileMode.CLAMP);
Shader shader = new ComposeShader(blackToColor, whiteMask, PorterDuff.Mode.SCREEN);
paint.setShader(shader);
...
canvas.drawRect(new Rect(0, 0, pWidth, pHeight), paint);

问题是: enter image description here

(Android 4.1.1下红框忽略,我只说上面的渐变)

知道哪里出了问题吗?我认为我的代码中缺少某些东西,但我不知道是什么。

编辑#1:如果我只是将 whiteMask 用于 setShader,我也会得到两个系统的不同结果:在 2.3.7 上,我可以看到配置菜单的文本(在弹出窗口)闪耀在渐变矩形中。此外,从左上边缘到右下边缘(黑色到白色)有一个渐变,但 4.1.1 上的渐变是从左到右的水平渐变。 看来是ComposeShader的问题

编辑#2:我找到了一个更简单的例子来描述问题:

Shader shader1 = new LinearGradient(0, 0, 0, pHeight, hue, 0xffffffff, Shader.TileMode.CLAMP);
Shader shader2 = new LinearGradient(0, 0, pWidth, 0, 0xff000000, 0xffffffff, Shader.TileMode.CLAMP);
Shader shader = new ComposeShader(shader1, shader2, PorterDuff.Mode.MULTIPLY);

因此,我们只有从任何颜色到黑色的垂直线性渐变和从黑色到白色的水平线性渐变。如果我们将这两层相乘,我们应该得到正确的矩形(如上面左侧的屏幕截图所示)。但是在 Android 4.1.1 上我只看到 shader2 的渐变。我也在 Gimp 中尝试了两层,结果与 Android 2.3.7 相同。

最佳答案

发现问题:好像是硬件加速的问题。如所述here 'ComposeShader 只能包含不同类型的着色器(例如 BitmapShader 和 LinearGradient,但不能包含 BitmapShader 的两个实例)'。但是,'如果您的应用程序受到任何这些缺失功能或限制的影响,您可以通过调用 setLayerType(View.LAYER_TYPE_SOFTWARE, null) 关闭应用程序受影响部分的硬件加速>.'

我看到,这个方法从 SDK 11 开始可用。我的应用程序支持从 SDK 7 开始的所有版本,所以我必须检查该方法是否可用:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

现在一切都很好。

关于android - Android 4.1.1 上的 ComposeShader 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445583/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com