在 RecyclerView 上设置 alpha 但未选择子项 (Kotlin)

Set alpha on RecyclerView but not selected child (Kotlin)

我正在寻找一种方法来设置 RecyclerView 的所有元素的 alpha 而无需遍历元素。

基本上我可以设置整个回收器的 alpha 并且所有子级都将继承该 alpha,但是当我更新所选子级的 alpha 时它仍然继承其父级的值而不是更新其自己的 alpha 值。当单击具有以下 clickListener 的项目时,所有这一切都必须发生。

// it is the view on which the listener is called that belongs to the recycler
private val click = View.OnClickListener {
   recycler.alpha = 0.2f
   it.alpha = 1f
}

我检查了是否正确选择了项目并且调用了 clickListener。问题似乎是 alpha 是从父 ViewGroup 继承的,但在 official docs 中我找不到任何关于无法更改子 view 中继承的 alpha 值的信息。

我错过了什么?如果设置父级的 alpha ViewGroup 是不行的,有没有办法避免遍历所有元素并为每个元素设置 alpha 值?

它不是继承的 - children 被绘制为 parent 的 part。因此,由于整个 parent 具有该 alpha,因此 children 是使用该 alpha 绘制的。将 child 上的 alpha 设置为 0.2f 将使 child 甚至 更多 transparent.

您最好的选择可能是在您的 RecyclerView.Adapter 子类的 onBindViewHolder 方法中正确设置 alpha,并通过更改支持数据和 notify... 方法来更改 alpha。尝试在适配器外部更改 RecyclerView child 视图是自找麻烦,因为 RecyclerView 不会知道它们,并且可能会更改您的内容、添加更多视图等。