setAlpha()在RecyclerView中不起作用

时间:2018-07-13 13:51:37

标签: android android-recyclerview android-view transparency android-viewholder

我试图根据某些用户输入更改RecyclerView中项目视图的透明度。

if (quantity>0) {
    holder.itemView.setAlpha((float) 1);
} else {
    holder.itemView.setAlpha((float) 0.65);
}

将alpha值从0.65更改为1很好。但是不是相反。调试时,它清楚地显示了经过holder.itemView.setAlpha((float) 0.65);行的情况。但是,alpha不会减少。关于发生了什么的任何线索?

4 个答案:

答案 0 :(得分:4)

回收者的ItemAnimator在更新项目过程中更改Alpha 您可以尝试添加

((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);

答案 1 :(得分:2)

我有同样的问题。不用更改itemView的Alpha,而是给您的根布局命名并更改其Alpha,因为recyclerview动画处理itemView Alpha动画使其不起作用。

答案 2 :(得分:0)

删除项目动画师

mRecyclerView.setItemAnimator(null);

答案 3 :(得分:0)

认为这是 HolderView 类

class MyViewHolder(val viewHolder: View) : RecyclerView.ViewHolder(view)

并考虑这就是您的 Adapter 类从内部的样子

// ...

override fun onBindViewHolder(holder: MyViewHolder, i: Int) {
    holder.viewHolder.alpha = 0.65f
}

有时如果您的代码是 holder.viewHolder.alpha = 0.65f,它并不总是有效!

除此之外,您还可以像那样使用主容器的 alpha

<RelativeLayout
    android:id="@+id/viewMain"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    ... Your other components goes here

</RelativeLayout>

现在,从你的适配器改用它,它应该适用于所有情况

// ...

override fun onBindViewHolder(holder: MyViewHolder, i: Int) {
    holder.viewMain.alpha = 0.65f
}