RecyclerView中的GradientDrawable.setColors无法正常工作

时间:2016-12-26 18:01:41

标签: android imageview android-recyclerview drawable

我有一个RecyclerView,其中包含每个元素的CircularImageViewImageView后继者)。到目前为止,我将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

看起来像这样:

getColor

上面的代码按预期工作。现在我想使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个元素和第三种颜色是绿色,所有可绘制的颜色都变为绿色):

getColors

除了发送颜色数组而不是单一颜色外,它与setColors完全相同,所以我不知道这里有什么问题。

0 个答案:

没有答案