为什么 setAlpha() 在 RecyclerViews 中不起作用?
Why is setAlpha() not working in RecyclerViews?
我正在尝试根据某些用户输入更改 RecyclerView 中项目视图的透明度。
if (quantity>0) {
holder.itemView.setAlpha((float) 1);
} else {
holder.itemView.setAlpha((float) 0.65);
}
当数量 > 0 时,将 alpha 从 0.65 更改为 1 效果很好。但相反的情况在另一种情况下不起作用。 调试时,它清楚地显示通过行 holder.itemView.setAlpha((float) 0.65);
但是,alpha 并没有减少。关于发生了什么的任何线索?
回收商的 ItemAnimator 在更新项目过程中更改了 alpha
你可以尝试添加
((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
我遇到了同样的问题。不要更改 itemView
的 alpha,而是为根布局命名并更改其 alpha,因为 recyclerview 动画处理 itemView
alpha 动画使其无法工作。
删除项目动画
在Java中:
mRecyclerView.setItemAnimator(null);
或者在 Kotlin 中:
recycler_view.itemAnimator = null
认为这是 HolderView class
class MyViewHolder(val viewHolder: View) : RecyclerView.ViewHolder(view)
考虑一下您的适配器 class 从内部看的样子
// ...
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
}
我正在尝试根据某些用户输入更改 RecyclerView 中项目视图的透明度。
if (quantity>0) {
holder.itemView.setAlpha((float) 1);
} else {
holder.itemView.setAlpha((float) 0.65);
}
当数量 > 0 时,将 alpha 从 0.65 更改为 1 效果很好。但相反的情况在另一种情况下不起作用。 调试时,它清楚地显示通过行 holder.itemView.setAlpha((float) 0.65);
但是,alpha 并没有减少。关于发生了什么的任何线索?
回收商的 ItemAnimator 在更新项目过程中更改了 alpha 你可以尝试添加
((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
我遇到了同样的问题。不要更改 itemView
的 alpha,而是为根布局命名并更改其 alpha,因为 recyclerview 动画处理 itemView
alpha 动画使其无法工作。
删除项目动画
在Java中:
mRecyclerView.setItemAnimator(null);
或者在 Kotlin 中:
recycler_view.itemAnimator = null
认为这是 HolderView class
class MyViewHolder(val viewHolder: View) : RecyclerView.ViewHolder(view)
考虑一下您的适配器 class 从内部看的样子
// ...
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
}