我有一个RecyclerView
,其中包含每个元素的CircularImageView
(ImageView
后继者)。到目前为止,我将src
的{{1}}设置为预定义的可绘制形状(必须这样做以使ImageView
正常工作),我只是以编程方式更改颜色,来自CircularImageView
的数组。
这是可绘制的@ColorRes
(是一个实体,而不是渐变):
shape_colored_circle.xml
这是<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="135"
android:endColor="#aaa"
android:centerColor="#aaa"
android:startColor="#555"
android:type="linear" />
<size
android:height="70dp"
android:width="70dp" />
</shape>
(删除无关数据):
CircularImageView
这就是我改变<com.mikhaellopez.circularimageview.CircularImageView
android:id="@+id/mini_thumbnail"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/shape_colored_circle"/>
中的颜色的方式:
onBindViewHolder
看起来像这样:
上面的代码按预期工作。现在我想使drawable成为一个实际渐变而不是纯色,但是当用int[] colors = activity.getResources().getIntArray(R.array.colors_palette);
int[] lightColors = activity.getResources().getIntArray(R.array.light_colors_palette);
if (position < colors.length) {
GradientDrawable gd = (GradientDrawable) holder.thumbnail.getDrawable();
if (gd != null) {
gd.setOrientation(GradientDrawable.Orientation.TL_BR);
//gd.setColors(new int[] {lightColors[position], lightColors[position], colors[position]});
gd.setColor(colors[position]);
}
}
替换setColor
时,所有元素都用与最后一个id匹配的颜色着色(如果我有3个元素和第三种颜色是绿色,所有可绘制的颜色都变为绿色):
除了发送颜色数组而不是单一颜色外,它与setColors
完全相同,所以我不知道这里有什么问题。