画像ビューの色合いを設定する必要があります...私はそれを次のように使用しています:
imageView.setColorFilter(R.color.blue,Android.graphics.PorterDuff.Mode.MULTIPLY);
しかし、それは変わりません...
色合いは、次のようにしてコード内で非常に簡単に変更できます。
imageView.setColorFilter(Color.argb(255, 255, 255, 255));
//ホワイトカラー
あなたが色合いが欲しいなら
imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), Android.graphics.PorterDuff.Mode.MULTIPLY);
ベクトル描画用
imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), Android.graphics.PorterDuff.Mode.SRC_IN);
_ update _ :
@ ADevは彼の答えの中で新しい解決策を持っています ここ 、しかし彼の解決策は新しいサポートライブラリを必要とします - 25.4.0以上。
ほとんどの回答はsetColorFilter
を使用することを参照していますが、これは最初に求められたものではありません。
ユーザー@Tadは 彼の答え を正しい方向に持っていますが、それはAPI 21+でしか動作しません。
すべてのAndroidバージョンで色合いを設定するには、ImageViewCompat
を使用します。
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint));
この場合のyourTint
は "color int"でなければならないことに注意してください。 R.color.blue
のようなカラーリソースがある場合、最初にカラーintをロードする必要があります。
ContextCompat.getColor(context, R.color.blue);
これは私のために働きました
mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500));
@Hardikはそれを正しく持っています。コード内のもう1つのエラーは、XML定義の色を参照したときです。 IDを使用してカラーリソースを検索し、 resource をsetColorFilter
メソッドに渡す必要がある場合は、idのみをsetColorFilter
メソッドに渡しました。下記のオリジナルのコードを書き直してください。
この行があなたの活動の範囲内であれば:
imageView.setColorFilter(getResources().getColor(R.color.blue), Android.graphics.PorterDuff.Mode.MULTIPLY);
そうでなければ、あなたはあなたの主な活動を参照する必要があります:
Activity main = ...
imageView.setColorFilter(main.getResources().getColor(R.color.blue), Android.graphics.PorterDuff.Mode.MULTIPLY);
これは、整数、ブール、ディメンションなど、他の種類のリソースにも当てはまることに注意してください。文字列を除いて、最初にgetString()
を呼び出さなくてもgetResources()
をアクティビティで直接使用できますなぜ)。
そうでなければ、あなたのコードは良さそうに見えます。 (私はsetColorFilter
メソッドを調べすぎたことはありませんが…)
私はすべての方法を試した後、彼らは私のために動作しませんでした。
別のPortDuff.MODEを使用して解決策を得ます。
imgEstadoBillete.setColorFilter(context.getResources().getColor(R.color.green),PorterDuff.Mode.SRC_IN);
Lollipopから始めて、新しいPaletteクラスで動作するBitmapDrawables用の tint メソッドもあります。
public void setTintList(ColorStateList tint)
そして
public void setTintMode(PorterDuff.Mode tintMode)
Androidの古いバージョンでは、 DrawableCompat ライブラリを使用できます。
これを試して。サポートライブラリがサポートするすべてのAndroidバージョンで動作するはずです。
public static Drawable getTintedDrawableOfColorResId(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorRes int colorResId) {
return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), ContextCompat.getColor(context, colorResId));
}
public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorInt int color) {
return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), color);
}
public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) {
Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable);
DrawableCompat.setTint(wrapDrawable, color);
DrawableCompat.setTintMode(wrapDrawable, PorterDuff.Mode.SRC_IN);
return wrapDrawable;
}
あなたはそれを動作させるために上記のいずれかを使用することができます。
DrawableCompatのもっとおもしろい機能については here で読むことができます。
シンプルで一行
imageView.setColorFilter(activity.getResources().getColor(R.color.your_color));
Lollipopからはじめて ImageView#setImageTintList()
というメソッドが使えるようになりました。単色ではなくColorStateList
を取るので、画像の色合いを状態認識にすることができます。
Lollipopより前のデバイスでは、ドロアブルを着色してからそれをImageView
のimageドロアブルとして設定することで、同じ動作を実現できます。
ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_clr_selector);
Drawable drawable = DrawableCompat.wrap(imageView.getDrawable());
DrawableCompat.setTintList(drawable, csl);
imageView.setImageDrawable(drawable);
Random random=new Random;
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
ColorFilter cf = new PorterDuffColorFilter(Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255)),Mode.OVERLAY);
imageView.setImageResource(R.drawable.ic_bg_box);
imageView.setColorFilter(cf);
最初の答えは私にはうまくいきませんでした。
//get ImageView
ImageView myImageView = (ImageView) findViewById(R.id.iv);
//colorid is the id of a color defined in values/colors.xml
myImageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.colorid)));
これはAPI 21以降でのみ機能するようですが、私にとってはそれは問題ではありませんでした。 ImageViewCompatを使ってこの問題を解決することができます。
私は私が誰かを手伝ってくれることを願っています:-)
あなたの色が16進透明度を持っているならば、以下のコードを使ってください。
ImageViewCompat.setImageTintMode(img,PorterDuff.Mode.SRC_ATOP);
ImageViewCompat.setImageTintList(img,ColorStateList.valueOf(Color.parseColor("#80000000")));
色合いをクリアする
ImageViewCompat.setImageTintList(img, null);
PoterDuff.Mode
を使用しないでください、setColorFilter()
を使用してください。
ImageView imageView = (ImageView) listItem.findViewById(R.id.imageView);
imageView.setColorFilter(getContext().getResources().getColor(R.color.msg_read));
色合いattrにカラーセレクタを使用できることがわかりました。
mImageView.setEnabled(true);
xml:
<ImageView
Android:id="@+id/image_view"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/ic_arrowup"
Android:tint="@color/section_arrowup_color"
/>
section_arrowup_color.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@Android:color/white" Android:state_enabled="true"/>
<item Android:color="@Android:color/black" Android:state_enabled="false"/>
<item Android:color="@Android:color/white"/>
</selector>
Androidでプログラム的に画像ビューの色合いを設定する
Androidには2つの方法があります。
1)
imgView.setColorFilter(context.getResources().getColor(R.color.blue));
2)
DrawableCompat.setTint(imgView.getDrawable(),
ContextCompat.getColor(context, R.color.blue));
私は私が誰かを手伝ってくれることを願っています:-)
私はパーティーに遅刻しました、しかし私は上の私の解決策を見ませんでした。 setImageResource()
を使って色合いを設定することもできます(私のminSdkVersionは24です)。
そのため、まずセレクタを作成して/drawable
アセットフォルダに保存する必要があります(私はそれをic_color_white_green_search.xml
と呼びます)。
<!-- Focused and not pressed -->
<item Android:state_focused="true"
Android:state_pressed="false">
<bitmap Android:src="@drawable/ic_search"
Android:tint="@color/branding_green"/>
</item>
<!-- Focused and pressed -->
<item Android:state_focused="true"
Android:state_pressed="true">
<bitmap Android:src="@drawable/ic_search"
Android:tint="@color/branding_green"/>
</item>
<!-- Default -->
<item Android:drawable="@drawable/ic_search"/>
それからこのようにコードでそれを設定してください:
val icon = itemView.findViewById(R.id.icon) as ImageButton
icon.setImageResource(R.drawable.ic_color_white_green_search)
Kotlinが広く採用されて以来、 ADev の answer に追加しています(これは私の考えでは最も正しい)。
fun ImageView.setTint(context: Context, @ColorRes colorId: Int) {
val color = ContextCompat.getColor(context, colorId)
val colorStateList = ColorStateList.valueOf(color)
ImageViewCompat.setImageTintList(this, colorStateList)
}
私はこれがどんなAndroidプロジェクトで持っているのに役に立つかもしれない機能であると思います!
ADev のおかげでより単純化された拡張機能
fun ImageView.setTint(@ColorRes colorRes: Int) {
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(ContextCompat.getColor(context, colorRes)))
}
使用法: -
imageView.setTint(R.color.tintColor)
@milosmnsが言ったように、あなたはimageView.setColorFilter(getResouces().getColor(R.color.blue),Android.graphics.PorterDuff.Mode.MULTIPLY);
を使うべきです
このAPIはカラーリソースIDの代わりにカラー値を必要とします。それがあなたのステートメントがうまくいかなかった理由の根本的な原因です。
あなたの色合いにselectorを設定したい場合は:
ImageViewCompat.setImageTintList(iv, getResources().getColorStateList(R.color.app_icon_click_color));
追加するだけで、既存のティントカラーを削除したい場合は、透明カラーに設定できます。
mSignInButton.setColorFilter(Color.TRANSPARENT);