web-dev-qa-db-ja.com

Imageviewがカラーフィルターをグラデーションに設定

グラデーションで色付けしたい白い画像があります。それぞれ特定のグラデーションで色付けされた一連の画像を生成する代わりに、(xmlではなく)コードでこれを実行したいと思います。

画像の色を変更するには、

imageView.setColorFilter(Color.GREEN);

そして、これはうまくいきます。しかし、どうすれば単色の代わりにグラデーションカラーを適用できますか? LinearGradientは役に立ちません。setColorFilterはShaderオブジェクトに適用できないためです。

[〜#〜] edit [〜#〜]:これは私が持っている画像です:

enter image description here

これは私が欲しいものです:

enter image description here

そして、これは私が得ているものです:

enter image description here

23
Malfunction

BitmapImageViewを取得し、同じBitmapShaderで再描画する必要があります

public void clickButton(View v){
    Bitmap myBitmap = ((BitmapDrawable)myImageView.getDrawable()).getBitmap();

    Bitmap newBitmap = addGradient(myBitmap);
    myImageView.setImageDrawable(new BitmapDrawable(getResources(), newBitmap));
}


public Bitmap addGradient(Bitmap originalBitmap) {
    int width = originalBitmap.getWidth();
    int height = originalBitmap.getHeight();
    Bitmap updatedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(updatedBitmap);

    canvas.drawBitmap(originalBitmap, 0, 0, null);

    Paint paint = new Paint();
    LinearGradient shader = new LinearGradient(0, 0, 0, height, 0xFFF0D252, 0xFFF07305, Shader.TileMode.CLAMP);
    Paint.setShader(shader);
    Paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawRect(0, 0, width, height, Paint);

    return updatedBitmap;
}

UPDATE 3変更:グラデーションの色、LinearGradient幅= 0、PorterDuffXfermode。 PorterDuffXfermodeを理解するための良い画像を以下に示します。 enter image description here

41
LaurentY