在 RecyclerView.Adapter 中使用以下代码:
onBindViewHolder(VH holder, int position){
holder.itemView.setAlpha(0.5f);
}
首次显示该项目时不会显示 Alpha。但是,如果您离开屏幕并返回,则 Alpha 会准确显示。该值正在设置,但在再次显示之前不会显示。关于如何让 setAlpha() 在第一次查看时生效的任何想法。
经过进一步调查,只有在使用动画器(例如 android.support.v7.widget.DefaultItemAnimator )时才会发生这种情况,它将清除为视图设置的任何 alpha 值。您可以使用
RecyclerView.setItemAnimator(null);
并且 alpha 将保持不变
RecyclerView
默认动画师修改 itemView
上设置的 ViewHolder
上的 alpha 设置。
将您的
itemView
布局包装在 FrameLayout
中,并修改 FrameLayoyt
子级的 alpha,例如:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/system_modifies_my_alpha">
<FrameLayout
android:id="@+id/view_holder_bind_modifies_my_alpha">
<!-- your children go here-->
</FrameLayout>
</FrameLayout>
一定要在创建Holder的过程中设置setAlpha(),
class ViewHolder extends RecyclerView.ViewHolder{
...
...
public ViewHolder(View v){
super(v);
...
...
itemView.setAlpha(0.5f);
}
}
不只在里面
onBindViewHolder()
onBindViewHolder(VH holder, int position){
holder.itemView.setAlpha(0.5f);
}
要不禁用 itemAnimator,您可以使用以下解决方案:
((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);