我们可以为RecyclerView动画高度设置动画吗?

时间:2017-05-26 03:17:14

标签: android android-recyclerview android-animation

我知道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>

如果我设置&#34; tv2&#34;对View.VISIBLE的可见性,行高在没有任何动画的情况下发生变化。

我已经看到了一些尝试在视图本身上运行自己的ValueAnimator的方法,但我的理解是它是

(1)效率不高

(2)您不应该直接在视图上运行动画,因为它们可能会在动画运行时从用户交互中回收。

2 个答案:

答案 0 :(得分:0)

尝试在XML中的max_occurrences = max(counter.values()) target_values = [k for k, v in counter.items() if v == max_occurrences]

中设置android:animateLayoutChanges="true"

答案 1 :(得分:0)

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);
        }
    });
}