抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

RecyclerView item 默认隐藏显示动画卡顿

RecyclerView 是平时最常用的一个控件,但这个问题开发了这么久,我也是第一次遇到。上图:

这个实现很简单,就是一个普通的 adapter 然后将 item 中的一块区域以 VISIBLE 和 GONE 的形式进行显示隐藏,然后 RecyclerView 默认的动画效果,即可达成这样的效果。这时候我的 RecyclerView 是这样定义的:

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:itemCount="5"
        tools:listitem="@layout/item_component_style" />

但仔细看上面的动画,就会发现,在隐藏蓝色块的时候会卡顿一下。因为这只是份 demo,代码实在简单,后来经过排查发现是 RecyclerView 高度指定为 wrap_content 导致,改为固定高度(我这里是指定约束)即可:

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/space_title"
        app:layout_constraintBottom_toBottomOf="parent"
        tools:itemCount="5"
        tools:listitem="@layout/item_component_style" />

看结果:

到这里可以知道大概原因是 RecyclerView 因内部 view 的高改变发生了多次的测量绘制,而具体掉帧原因应该是动画未执行完成但已经进行了 RecyclerView 高度变更,而不是当动画执行完成再进行 RecyclerView 高度的变更。

一个细节问题,以上。


本站由以下主机服务商提供服务支持:

0条评论

发表评论