Imageviewに簡単なカラーフィルターを実装して、黒の画像を白の画像に変えようとしています。それを達成するために、私は次のことを行います。
weatherImg.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY);
weatherImg.setImageResource(R.drawable.b_clouded_rain);
また、カラーフィルターの色を赤と白に変更しようとしましたが、それらはすべて効果がありません。何が間違っていますか?
私は自分の質問に答えるのを嫌いながら、問題を見つけました:私は使用すべきでした:
weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
適用するフィルタリングの種類によって異なります。透明度のある画像に新しい色を適用したくない場合、それが私にとってうまくいったことです:
weatherImg.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
このPorterDuffフィルターについて詳しく知りたい場合は、理解に役立つgoog記事を見つけました。 http://www.ibm.com/developerworks/Java/library/j-mer0918/ 読み取り:)
Android 6.で同じ問題が発生しました。6。ImageView.getDrawable().setColorFilter()
の代わりにImageView.setColorFilter()
を使用して解決しました。
このコードを使用します
Drawable drawable = DrawableCompat.wrap(getDrawable(drawableResource));
drawable.mutate();
DrawableCompat.setTint(drawable, getColor(color));
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
public static int getColor(int id) {
return ContextCompat.getColor(getInstance().context, id);
}
public static Drawable getDrawable(int id) {
return ContextCompat.getDrawable(getInstance().context, id);
}
4.3を実行しているSamsung S3でsetColorFilter
に問題があり、フィルターを機能させる唯一の方法は、draw(Canvas canvas)
メソッドで適用することでした。
public class ColouredDrawable extends BitmapDrawable {
private ColorFilter mColorFilter;
public ColouredDrawable(Bitmap toTransform, int toColour, Resources resources) {
super(resources, toTransform);
float[] matrix = {
0, 0, 0, 0, ((toColour & 0xFF0000) / 0xFFFF),
0, 0, 0, 0, ((toColour & 0xFF00) / 0xFF),
0, 0, 0, 0, (toColour & 0xFF),
0, 0, 0, 1, 0 };
mColorFilter = new ColorMatrixColorFilter(matrix);
}
@Override
public void draw(Canvas canvas) {
setColorFilter(mColorFilter);
super.draw(canvas);
}
setColorFilter
をBitmapDrawableに単純に適用しても効果はないようです。
私にとっては、ImageView
でsetColorFilter()
を呼び出すだけでは機能しませんでした。
_imageView.setColorFilter(ResourcesCompat.getColor(resources, color, null)) //didnt work on 21, only 22+
_
何らかの理由で、API 21でsetColorFilter()
を適切に機能させる唯一の方法は、ビューメッセージキューに変更を投稿することでした。
_imageView.post { imageView.setColorFilter(ResourcesCompat.getColor(resources, color, null)) } //this works on 21+
_
私にとっては、このソリューションのみが機能しました:
image.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY);
image.setImageResource(R.drawable.img);
R.drawable.img
はベクター画像であり、ラスターリソースには影響しません
Android 4.3および4.4の場合、setColorFilterは機能しません。代わりにDrawableCompatを使用してください。
val drawable = DrawableCompat.wrap(ContextCompat.getDrawable(
context,
R.drawable.b_clouded_rain));
DrawableCompat.setTint(drawable, foregroundColor);
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN)
.setColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY);
weatherImg.setImageResource(R.drawable.b_clouded_rain);