コードで白いマーカー画像の色を変更しようとしています。以下のコードで色が変わるはずですが、マーカーは白のままです。
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
私は何か見落としてますか?resフォルダーにあるドローアブルの色を変更する他の方法はありますか?
コードで白いマーカー画像の色を変更しようとしています。以下のコードで色が変わるはずですが、マーカーは白のままです。
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
私は何か見落としてますか?resフォルダーにあるドローアブルの色を変更する他の方法はありますか?
回答:
これを試して:
Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.my_drawable);
Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
DrawableCompat.setTint(wrappedDrawable, Color.RED);
DrawableCompatAPI 22以前のデバイスで下位互換性とバグ修正を提供するため、使用は重要です。
OverlayItems問題を引き起こしている可能性のあるhello mapview クラスと関係があるのでしょうか?それは私のresフォルダーから通常のドローアブルで、特別なものは何もありません...
あなたはSVGベクタードローアブルのためにこれを試すことができます
DrawableCompat.setTint(
DrawableCompat.wrap(myImageView.getDrawable()),
ContextCompat.getColor(context, R.color.another_nice_color)
);
nullしますDrawable#setTintList(ColorStateList)
ドローアブルでmutate()を呼び出す必要がある場合があります。そうしないと、すべてのアイコンが影響を受けます。
Drawable icon = ContextCompat.getDrawable(getContext(), R.drawable.ic_my_icon).mutate();
TypedValue typedValue = new TypedValue();
getContext().getTheme().resolveAttribute(R.attr.colorIcon, typedValue, true);
icon.setColorFilter(typedValue.data, PorterDuff.Mode.SRC_ATOP);
Lollipop、android 5. +でこれを行う別の方法は、ビットマップドローアブルに次のような色合いを設定することです。
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_back"
android:tint="@color/red_tint"/>
ドローアブルで使用したい色の数が限られている場合、これはうまくいきます。詳細については、私のブログ投稿をご覧ください。
minSdkVersion 16Android 4.1.1デバイスでこれをテストしただけです。)
android:background="..."。かなり奇妙です!
これを試すことができImageViewます。を使用してsetColorFilter()。
imageViewIcon.setColorFilter(ContextCompat.getColor(context, R.color.colorWhite));
私はあなたがコンテキストを渡すことができる一般的な関数を書きました、アイコンはidのdrawable / mipmap画像アイコンであり、そのアイコンに必要な新しい色です。
この関数はドローアブルを返します。
public static Drawable changeDrawableColor(Context context,int icon, int newColor) {
Drawable mDrawable = ContextCompat.getDrawable(context, icon).mutate();
mDrawable.setColorFilter(new PorterDuffColorFilter(newColor, PorterDuff.Mode.SRC_IN));
return mDrawable;
}
changeDrawableColor(getContext(),R.mipmap.ic_action_tune, Color.WHITE);
キーの色が白なので、ColorMatrixColorFilterを試すことができます。
// Assuming "color" is your target color
float r = Color.red(color) / 255f;
float g = Color.green(color) / 255f;
float b = Color.blue(color) / 255f;
ColorMatrix cm = new ColorMatrix(new float[] {
// Change red channel
r, 0, 0, 0, 0,
// Change green channel
0, g, 0, 0, 0,
// Change blue channel
0, 0, b, 0, 0,
// Keep alpha channel
0, 0, 0, 1, 0,
});
ColorMatrixColorFilter cf = new ColorMatrixColorFilter(cm);
myDrawable.setColorFilter(cf);
これでうまくいきました。0xとカラーコードの間に「ff」を入れてください。このように0xff2196F3
Drawable mDrawable = ContextCompat.getDrawable(MainActivity.this,R.drawable.ic_vector_home);
mDrawable.setColorFilter(new
PorterDuffColorFilter(0xff2196F3,PorterDuff.Mode.SRC_IN));
Mode.LIGHTENまたはを試してくださいMode.DARKEN。Android Javadocは、PorterDuffモードの機能を説明するのは恐ろしいです。あなたはここでそれらを見ることができます: PorterDuff | アンドロイド
MozillaのサイトにあるCompositingを見て回ることをお勧めします。(彼らはアンドロイドが持っているすべてのモードを持っているわけではありませんが、彼らはそれらの多くを持っています)
構文
"your image name".setColorFilter("your context".getResources().getColor("color name"));
例
myImage.setColorFilter(mContext.getResources().getColor(R.color.deep_blue_new));
これは私がやったことです:
public static Drawable changeDrawableColor(int drawableRes, int colorRes, Context context) {
//Convert drawable res to bitmap
final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableRes);
final Bitmap resultBitmap = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth() - 1, bitmap.getHeight() - 1);
final Paint p = new Paint();
final Canvas canvas = new Canvas(resultBitmap);
canvas.drawBitmap(resultBitmap, 0, 0, p);
//Create new drawable based on bitmap
final Drawable drawable = new BitmapDrawable(context.getResources(), resultBitmap);
drawable.setColorFilter(new
PorterDuffColorFilter(context.getResources().getColor(colorRes), PorterDuff.Mode.MULTIPLY));
return drawable;
}
次のようなメソッドを作成します。
//CHANGE ICON COLOR
private void changeIconColor(Context context ,int drawable){
Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, drawable);
assert unwrappedDrawable != null;
Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
DrawableCompat.setTint(wrappedDrawable, getResources().getColor(R.color.colorAccent));
}
そしてそれをそれのように使ってください:
changeIconColor(this,R.drawable.ic_home);
それを行う最も簡単な方法:
imageView.setColorFilter(Color.rgb(r, g b));
または
imageView.setColorFilter(Color.argb(a, r, g, b));
a、r、g、b:カラーargb値。