ColorFilter添加但忽略透明部分

时间:2018-03-15 10:17:33

标签: android porter-duff

在我的应用中,我正在尝试更改标记图像的颜色。但它并不完全符合我希望它的工作方式。

Drawable drawable = getDrawable(R.drawable.ic_marker);
drawable.setColorFilter(item.getColor()), PorterDuff.Mode.ADD);

drawable看起来像这样(下图),当我添加ColorFilter时,标记获得正确的颜色,白色保持白色,但图像的透明部分也获得颜色。我只希望黑色改变,白色和透明的部分必须保持这种状态。

drawable

1 个答案:

答案 0 :(得分:0)

这是我用于setColorFilterColorMatrixColorMatrixColorFilter的实验所用的内容:

drawable.setColorFilter(item.getColorMatrix());

drawable.setColorFilter(new ColorMatrixColorFilter(getColorMatrix5()));//custom 5

//custom 5
private ColorMatrix getColorMatrix5() 
{
    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.setSaturation(0);//make it greyscale
    ColorMatrix blueMatrix = new ColorMatrix(new float[] {
        0, 0, 0, 0, 0, // red
        0, 0, 0, 0, 0, // green
        1, 1, 1, 1, 1, // blue
        1, 1, 1, 1, 1  // alpha
    });
    // Convert, then scale and clamp
    colorMatrix.postConcat(blueMatrix);
    return colorMatrix;
}//getColorMatrix5

请参阅PorterDuffPorterDuff.ModePorterDuffXfermodeColorFilterColorMatrixColorMatrixColorFilterPorterDuffColorFilter,{{3} },Canvas