Android-анимации - перемещение объектов ближе

Я пытался анимировать по сценарию. По сути, я хочу начать с нескольких ImageViews, которые расположены вертикально и распределены по экрану, и после определенного действия (нажатие кнопки и т. д.) они должны приблизиться. Важно отметить, что количество ImageView может варьироваться в зависимости от случая (не всегда 3, как на картинке), поэтому предпочтительнее использовать общее решение.

Мой первый подход состоял в том, чтобы перечислить изображения в Recyclerview и развернуть изображения с пользовательским 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, но до сих пор ничего не получалось.

Буду рад любым предложениям :-)


person philippbar    schedule 13.02.2020    source источник


Ответы (1)


Для устройств под управлением 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, который вы хотите удалить, а sceneRoot — это ViewGroup, который является (прямым или косвенным) родителем всех View, для которых изменение свойств (видимость, положение, размер) должны быть анимированы.

Подробнее об анимации Transitions:

Анимация изменений макета с помощью перехода

Начало работы с переходами активности и фрагментов < /а>

person Bö macht Blau    schedule 13.02.2020