Android Анимации - перемещение объектов ближе - PullRequest
2 голосов
/ 13 февраля 2020

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

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

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

1 Ответ

0 голосов
/ 13 февраля 2020

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

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

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

Начало работы с переходами операций и фрагментов

...