2016-07-24 7 views
1

私は制約レイアウトでiconのようなアイコンを持っています。ドロアブルセットの色をアン​​ドロイド:背景として変更するにはどうすればいいですか?

これは、この画像表示のための私のレイアウトxmlです:あなたが見ることができるように

<ImageView 
     android:id="@+id/vTotalPaidAvatar" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:contentDescription="@null" 
     android:src="@drawable/ic_group_ic_total" 
     tools:src="@drawable/ic_group_ic_total" 
     app:layout_constraintLeft_toLeftOf="@+id/vSettleDebtsLayout" 
     android:layout_marginLeft="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintTop_toTopOf="@+id/vSettleDebtsLayout" 
     android:layout_marginTop="16dp" 
     android:background="@drawable/avatar_circle" /> 

、アイコンだけでドル記号です。私は背景としてその灰色の円を設定します。問題は、その背景の色を動的に変更する必要があることです。ドル記号は白いままでなければなりません。 私の質問は、どのように背景の色だけを変更する方法はありますか?

もう1つの解決策は、次の画像ビューとしてそのサークルを使用し、その画像ビューの色を変更することです。しかし、私はこの問題のいくつかのより多くの」明確な解決策があるかもしれないと思います。

ヒント:)

答えて

2

試してみてください。

yourImage.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN); 

これは文字通りImageViewから(srcなし)背景を取得し、色でその形状をカバーしています。 drawableと与えられた色がどのように合成されているかは、Porter Duff - hereのモードによって定義されます。それを行うには

+0

あなたは私の問題を解決しました。ありがとうございました :) –

0

のおかげであなたはandroid:background="@color/my_color"を試してみましたし、コードimageView.setBackgroundColor(Color.rgb(255, 255, 255));

+0

私は背景としてその円を使用する必要があるし、私はその円の色を変更する必要があります。それはdrawableです...私は、私のイメージビュー専用のすべてのスペースを埋めるだろうバックグラウンドとして色を使用することはできません - >(それは円の形をしません) –

1

を通じてまあuは

android:backgroundTint="your color" 
を試みなければなりませんこれが作業を行います

ImageViewのタグで

+0

ええ、しかし、コード内の背景色合いを変更する必要がありますsetBackgroundTintColorのようなメソッドはありません –

2

ベストな方法:

public static void colorDrawable(View view, int color) { 
      Drawable wrappedDrawable = DrawableCompat.wrap(view.getBackground()); 
      if (wrappedDrawable != null) { 
       DrawableCompat.setTint(wrappedDrawable.mutate(), color); 
       setBackgroundDrawable(view, wrappedDrawable); 
      } 
     } 

public static void setBackgroundDrawable(View view, Drawable drawable) { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
     view.setBackgroundDrawable(drawable); 
    } else { 
     view.setBackground(drawable); 
    } 
} 
関連する問題