我们能够动画化RecyclerView的行项高度吗?

3

我知道RecyclerView可以免费为我们处理条目的添加/删除动画。那么它是否支持动画化条目高度的更改呢?

例如:考虑以下XML格式的行项目:

<LineaLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">

  <TextView android:id="@+id/tv1" />

  <TextView android:id="@+id/tv2" android:visibility="gone" />

</LinearLayout>

如果我将“tv2”的可见性设置为View.VISIBLE,则行高会在没有任何动画的情况下发生变化。
我看到过一些尝试在视图本身上运行自己的ValueAnimator的方法,但我的理解是:
(1) 不高效
(2) 不应该直接在视图上运行动画,因为在动画运行时它们可能会被用户交互回收。
2个回答

1
在您的适配器中添加一个名为visibility的组件。在条目视图的onClickListener中,根据当前状态更改该对象的可见性组件的状态。在onBindViewHolder中,根据对象的状态设置tv2的可见性,并通知适配器对象已更改。
以下是示例:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    MyObject obj = myObjects.get(position);
    holder.itemView.findViewById(R.id.tv2).setVisibility(obj.isVisible() ? View.VISIBLE : View.GONE);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            obj.setVisible(!obj.isVisible());
            notifyItemChanged(position);
        }
    });
}

0
尝试在XML中的LinearLayout中设置android:animateLayoutChanges="true"

5
当视图可见时,起初可能会出现一些重叠。 - Nathan Reline
@NathanReline,您能否请描述一下原因? - valerybodak
@NathanReline 同样的问题:animateLayoutChanges 导致行重叠。 - Alessandro Scarozza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接