2

GridViewにいくつかの画像をロードしましたが、画面モードのブレンドを使用してそれらに赤みを帯びた色を適用したいと思います。

私のアダプターには次のコードがあります:

ImageView image = (ImageView) findViewById(...);
image.getDrawable().setColorFilter(channel.getSelectedColor(), Mode.SCREEN);

私も試しました

image.setColorFilter(channel.getSelectedColor(), Mode.SCREEN);

しかし、私はいつも次のようなものになってしまいます: アルファチャネルは赤です

を使用するMode.Multiplyと、透明な背景は着色されませんが、結果は暗すぎます。Mode.Screen透明部分を使用して着色しないことは可能ですか?

作成する必要がありColorMatrixますか?誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

-1

標準の Mode.SCREEN もアルファを変更するため、RGB のみをブレンドしてアルファのみを残すカスタム カラー マトリックスをいつでも使用できます。サンプルコードは次のとおりです。

static ColorFilter screen(int c) {
    float r = Color.red(c) / 256f, g = Color.green(c) / 256f, b = Color.blue(c) / 256f;

    return new ColorMatrixColorFilter(new ColorMatrix(new float[]
            {
                    1 - r, 0, 0, 0, r, // r
                    0, 1 - g, 0, 0, g, // g
                    0, 0, 1 - b, 0, b, // b
                    0, 0, 0, 1, 0, // a
            }));
}

次に、それをドローアブルのカラー フィルターとして使用します。

image.getDrawable().setColorFilter(screen(channel.getSelectedColor()));

残念ながら、このコードは機能しません。現在のバージョンの Androidは、 color matrix の右端の列を単純に無視しているようです。ソースコードもこれを証明しています-元のマトリックスの4x4部分のみを使用しています。

于 2014-11-14T10:42:15.353 に答える