Android 动画 - 将对象移近

Android Animations - Moving objects closer

我一直在尝试在 scenario 之后制作动画。基本上我想从一些开始 ImageViews 垂直排列并在屏幕上展开,在执行特定操作(按下按钮等)后,它们应该 靠近 。值得一提的是,ImageView 的数量 可能会因情况而异(并不像图片中那样总是 3 个),因此最好使用通用解决方案。

我的第一个方法是在 Recyclerview and spread the images with a custom ItemDecoration 中列出图像,如下所示:

class CustomItemDecorator(private val spaceHeight: Int) : RecyclerView.ItemDecoration() {
    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        with(outRect) {
            if (parent.getChildAdapterPosition(view) == 0) {
                top = spaceHeight
            }
            bottom = spaceHeight
        }
    }
}

通过删除 ItemDecorator ( myRecyclerView.removeItemDecoration(my_decorator) ) 我能够将图像 拉近 。 尽管为了改善用户体验,这对任意数量的图像都可以正常工作,但我想 动画化 这种过渡。我尝试将一些更复杂的动画应用到我的 RecyclerView,但直到现在都没有任何效果。

我很乐意提出任何建议:-)

对于设备运行 Android 5+(API级别21+),您可以使用TransitionManager实现流畅的动画:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
        TransitionManager.beginDelayedTransition(sceneRoot as ViewGroup, Slide())
}
recyclerView.removeItemDecoration(itemDecorator)

这里,itemDecorator 是要删除的 CustomItemDecorator 实例,sceneRootViewGroup 是所有 View 的(直接或间接)父级,属性(可见性、位置、大小)的更改应为其设置动画。

阅读更多关于 Transitions 的动画:

Animate layout changes using a transition

Getting Started with Activity & Fragment Transitions