我可以使用MotionLayout为RecyclerView中的单个项目设置动画吗?

时间:2019-08-18 08:43:43

标签: android android-recyclerview android-animation android-motionlayout

我想在recyclerview内创建可扩展项目,并且我认为使用MotionLayout创建动画将非常容易。我创建了运动场景,并测试了在回收器视图中单个项目是否可以独立运行的情况。

我尝试显示所有调试信息,并说正在发生过渡,但是recyclerview没有显示任何动画。我试图通知项目动画制作者动画已经在我的视口上启动,但是没有用。

override fun onTransitionStarted(p0: MotionLayout?, p1: Int, p2: Int) {
  recyclerView.itemAnimator?.onAnimationStarted(this@ViewHolder)
}
override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
  recyclerView.itemAnimator?.onAnimationFinished(this@ViewHolder)
}

我希望motinolayout状态转换可以在recyclerview中使用,但似乎不起作用。

单个列表项: enter image description here

内部列表: enter image description here

2 个答案:

答案 0 :(得分:1)

  

我想在recyclerview中创建可扩展项目,并且我认为使用MotionLayout创建动画将非常容易。

RecyclerView内使用MotionLayout来进行简单的扩展动画是过头的,只需在RecyclerView Adapter onBindViewHolder上使用简单的查看/隐藏即可获得相同的动画。然后,无论何时要扩展/折叠,只需调用带有位置的notifyItemchanged。这样可以节省您的时间。欢呼!

在RecyclerView适配器内部,

holder.itemView.setOnClickListener(v -> {
    // Get the current state of the item
    boolean expanded = item.isExpanded();
    // Change the state
    item.setExpanded(!expanded);
    // Notify the adapter that item has changed
    notifyItemChanged(position);
});

答案 1 :(得分:1)

尝试将您的ConstraintLayout更新为androidx.constraintlayout:constraintlayout:2.0.0-rc1,似乎这个袋子以及RecyclerView androidx.recyclerview:recyclerview:1.2.0-alpha05都是固定的。