RecyclerView 中 onBindView 上的 setAlpha() 在首次显示时不起作用

问题描述 投票:0回答:4

在 RecyclerView.Adapter 中使用以下代码:

onBindViewHolder(VH holder, int position){
   holder.itemView.setAlpha(0.5f);
}

首次显示该项目时不会显示 Alpha。但是,如果您离开屏幕并返回,则 Alpha 会准确显示。该值正在设置,但在再次显示之前不会显示。关于如何让 setAlpha() 在第一次查看时生效的任何想法。

android android-layout android-recyclerview android-viewholder
4个回答
23
投票

经过进一步调查,只有在使用动画器(例如 android.support.v7.widget.DefaultItemAnimator )时才会发生这种情况,它将清除为视图设置的任何 alpha 值。您可以使用

RecyclerView.setItemAnimator(null);

并且 alpha 将保持不变


17
投票

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>

1
投票

一定要在创建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);
}

0
投票

要不禁用 itemAnimator,您可以使用以下解决方案:

((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
© www.soinside.com 2019 - 2024. All rights reserved.