画像ビューの色合いを設定する必要があります...次のように使用しています:
imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY);
しかし、それは変わりません...
画像ビューの色合いを設定する必要があります...次のように使用しています:
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);
更新:
@ADevの彼の回答にはここで新しいソリューションがありますが、彼のソリューションには新しいサポートライブラリ(25.4.0以上)が必要です。
android:tint
すべてのAndroidバージョンで動作します。多分あなたは話しているのdrawableTint
ですか?
ほとんどの回答は、setColorFilter
最初に要求されたものではない使用を参照しています。
ユーザー@Tad の答えは正しい方向にありますが、これはAPI 21以降でのみ機能します。
すべてのAndroidバージョンで色合いを設定するには、次を使用しImageViewCompat
ます。
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint));
yourTint
この場合、「カラー整数」でなければならないことに注意してください。のようなカラーリソースがある場合は、R.color.blue
最初にcolor intをロードする必要があります。
ContextCompat.getColor(context, R.color.blue);
ImageView
AppCompatテーマのxml インスタンスまたはAppCompatImageView
サブクラスでのみ機能することに注意してください。
これは私のために働いた
mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500));
mImageView.setColorFilter(getContext().getResources().getColor(R.color.green_500));
@Hardikはそれを正しく持っています。コードのもう1つのエラーは、XML定義の色を参照するときです。setColorFilter
IDを使用してカラーリソースを検索し、リソースをsetColorFilter
メソッドに渡す必要がある場合は、ID のみをメソッドに渡しました。以下の元のコードを書き換えます。
この行がアクティビティ内にある場合:
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
あまり方法を調査していませんが...)
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;
}
上記のいずれかを使用して機能させることができます。
imageView.getBackground()
たため、ドローアブルを取得する必要もありましたimageView.getDrawable()
。
ADevのおかげでよりシンプルな拡張機能
fun ImageView.setTint(@ColorRes colorRes: Int) {
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(ContextCompat.getColor(context, colorRes)))
}
使用法:-
imageView.setTint(R.color.tintColor)
色に16進数の透明度がある場合は、以下のコードを使用します。
ImageViewCompat.setImageTintMode(imageView, PorterDuff.Mode.SRC_ATOP);
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(Color.parseColor("#80000000")));
色合いをクリアするには
ImageViewCompat.setImageTintList(imageView, null);
img
のタイプはImageViewです。
最初の答えがうまくいかなかったので:
//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を使用して、この問題を解決できます。
私は誰かを助けてくれれば幸いです:-)
Lollipopで始まる、ImageView#setImageTintList()
使用できるメソッドがあります... ColorStateList
単色ではなくを使用するという利点があり、イメージの色合いをステート対応にします。
Lollipop以前のデバイスでは、ドローアブルに色を付け、それをImageView
のイメージドローアブルとして設定することで、同じ動作を得ることができます。
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);
追加ADEVの答え Kotlinの普及、及びその便利な拡張機能するので、(私の意見では、最も正確です):
fun ImageView.setTint(context: Context, @ColorRes colorId: Int) {
val color = ContextCompat.getColor(context, colorId)
val colorStateList = ColorStateList.valueOf(color)
ImageViewCompat.setImageTintList(this, colorStateList)
}
これは、どのAndroidプロジェクトにも役立つ機能だと思います。
色合い属性にカラーセレクターを使用できることがわかりました。
mImageView.setEnabled(true);
activity_main.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>
app:srcCompat
代わりに使用し、build.gradleファイルの一部にandroid:src
追加vectorDrawables.useSupportLibrary = true
しdefaultConfig
ます。Kitkatエミュレーターで正常に動作することがテストされています。
私はパーティーに遅れましたが、上に私の懇願を見ませんでした。を介してティントカラーを設定することもでき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)
セレクターを色合いに設定する場合:
ImageViewCompat.setImageTintList(iv, getResources().getColorStateList(R.color.app_icon_click_color));
ティンティングを設定および設定解除する拡張機能を使用したKotlinソリューション:
fun ImageView.setTint(@ColorInt color: Int?) {
if (color == null) {
ImageViewCompat.setImageTintList(this, null)
return
}
ImageViewCompat.setImageTintMode(this, PorterDuff.Mode.SRC_ATOP)
ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(color))
}
正確な答えではありませんが、より簡単な代替策:
これはそのスニペットです:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/height120"
android:contentDescription="@string/my_description"
android:scaleType="fitXY"
android:src="@drawable/my_awesome_image"/>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/height120"
android:alpha="0.5"
android:background="@color/my_blue_color"/>
</FrameLayout>
png
。その後、背景は変わりませんか?また、アルファと色合いは大きく異なります。色合いは、私が間違っていなければ、色の置き換えのようなものです。意図された攻撃はありません。:)