繁体   English   中英

Android以编程方式在图层列表中设置颜色

[英]Android set colors in layer-list programmatically

我有这个可绘制的:

<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>

我将此设置为回收者视图中的项目:

<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>

我想为bind方法中的每个单元格设置不同的颜色:

@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?
}

我需要这个才能从api 17及更高版本开始工作。

尝试这个:

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

您必须调用drawable的mutate()方法,否则颜色将随着LayerDrawable的每次迭代而改变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM