【问题标题】:Setting alpha value on grayscale image for pre-lollipop devices looks vastly different为 pre-lollipop 设备的灰度图像设置 alpha 值看起来大不相同
【发布时间】:2015-10-19 09:32:04
【问题描述】:

在 Lollipop 之前的设备上在我的图像视图上设置灰度时遇到了一些问题。具体来说,在使用此代码将图像视图转换为灰度后设置透明度:

public static void setGrayScale(ImageView view) {

    Paint paint = new Paint();

    ColorMatrix matrix = new ColorMatrix();
    matrix.setSaturation(0);

    ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
    paint.setColorFilter(filter);

    view.setLayerType(View.LAYER_TYPE_HARDWARE, paint);
}

在 5.0+ 设备上,图像被转换为​​灰度,然后应用 alpha 值,从而产生漂亮的图像。

在 5.0 之前的设备(特别是 Nexus 4 和 4.2.2)上,似乎没有遵守 alpha 值,而是出现了更深的灰色。

有谁知道为什么会发生这种行为?这是相同的 setAlpha 值(0.6f)。我尝试了不同的应用灰度的方法,还尝试在之前和之后设置Alpha,但没有效果。

【问题讨论】:

    标签: android imageview grayscale colormatrix


    【解决方案1】:

    我认为原因是 ColorMatrixColorFilter 类的实现从 Lollipop 更改为您在 grepcode 中看到的。

    解决您的问题的方法是在values-v21 文件夹中为上述棒棒糖设置不同的值,在values 中设置棒棒糖前的值。

    【讨论】:

    • 很好的发现。如果实现不同,我如何在棒棒糖之前的设备上使用新的实现?在 values-v21 文件夹中设置值并不能真正描述我的用例,因为它是以编程方式设置的。
    • @FrostRocket 您可以在 values-v21 中设置值并使用 getResources().getColor(R.color.yourcolor);然后以编程方式使用它
    • 我知道您可以添加值,但主要问题是位图看起来不同。在 5.0 之前,alpha 值似乎被忽略了。 5.0以后好像还好。通过值为每个操作系统添加不同的 alpha 值并不能解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多