2017-09-01 3 views
0

Je possède ce drawable:couleurs set Android dans la couche liste programme

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/circle"> 
     <shape android:shape="oval"> 
      <size android:width="120dp" android:height="120dp"></size> 
      <stroke android:width="4dp"/> 
     </shape> 
    </item> 

    <item 
     android:id="@+id/person" 
     android:top="16dp" 
     android:bottom="16dp" 
     android:left="16dp" 
     android:right="16dp"> 
     <bitmap android:src="@drawable/ic_person_48dp" /> 
    </item> 

</layer-list> 

Je suis en train de cela comme un élément dans une vue recycleur:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_margin="10dp" 
    android:clickable="true" 
    android:gravity="center" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/person_icon"/> 

</LinearLayout> 

Je veux définir une couleur différente pour chaque cellule dans la méthode de liaison:

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    ImageView imageView = holder.personImageView; 

    // How do I grab the circle shape and person bitmap from the image view 
    // and set the colors for this cell? 
} 

J'ai besoin de cela pour travailler à partir de l'API 17 et plus.

Répondre

2

Essayez ceci:

final LayerDrawable layerDrawable = holder.personImageView.getDrawable().mutate(); 
layerDrawable.getDrawable(index).mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); 

Vous devez appeler la méthode mutate() du drawable, sinon la couleur va changer pour chaque itération de la LayerDrawable.