グラデーションで色付けしたい白い画像があります。それぞれ特定のグラデーションで色付けされた一連の画像を生成する代わりに、(xmlではなく)コードでこれを実行したいと思います。
画像の色を変更するには、
imageView.setColorFilter(Color.GREEN);
そして、これはうまくいきます。しかし、どうすれば単色の代わりにグラデーションカラーを適用できますか? LinearGradient
は役に立ちません。setColorFilterはShader
オブジェクトに適用できないためです。
[〜#〜] edit [〜#〜]:これは私が持っている画像です:
これは私が欲しいものです:
そして、これは私が得ているものです:
Bitmap
のImageView
を取得し、同じBitmap
をShader
で再描画する必要があります
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を理解するための良い画像を以下に示します。