Пример Android Проводника ArcMotion

Я пытаюсь понять демонстрационный пример из библиотеки https://github.com/bluelinelabs/Conductor.

Движение выглядит так

введите описание изображения здесь

Это код, отвечающий за анимацию

public class ArcFadeMoveChangeHandler extends TransitionChangeHandler {
    public ArcFadeMoveChangeHandler() { }

    @Override
    @NonNull
    protected Transition getTransition(@NonNull ViewGroup container, View from, View to, boolean isPush) {
        TransitionSet transition = new TransitionSet()
                .setOrdering(TransitionSet.ORDERING_SEQUENTIAL)
                .addTransition(new Fade(Fade.OUT))
                .addTransition(new TransitionSet().addTransition(new ChangeBounds()).addTransition(new ChangeClipBounds()).addTransition(new ChangeTransform()))
                .addTransition(new Fade(Fade.IN));

        transition.setPathMotion(new ArcMotion());

        return transition;
    }
}

Откуда он знает, что движение должно быть выполнено для FAB? Как я могу выполнить движение по дуге для FAB, но установить все остальные элементы на экране в FadeOut?

1 ответ

Откуда он знает, что движение должно быть выполнено для FAB?

Посмотрите документацию для Fade

Этот переход отслеживает изменения видимости целевых представлений в начальной и конечной сценах и затухает в представлениях, когда они становятся видимыми или невидимыми.

и документация для ChangeBounds (и другие подобные классы):

Этот переход фиксирует границы макета целевых видов до и после изменения сцены и анимирует эти изменения во время перехода.

Таким образом, Fab (и текст) не исчезают, потому что это общий элемент в демонстрационной версии проводников, и он присутствует в следующем макете с тем же "android:transitionName" в обоих макетах. Все остальное изменило видимость, поэтому оно исчезло.

Как я могу выполнить движение по дуге для FAB, но установить все остальные элементы на экране в FadeOut?

Просто удалить android:transitionName из textView. Я думаю, что Проводник может сделать что-то под капотом (т.е. вручную добавить transitionName), так что если удалить transitionName не помогает, попробуйте удалить / изменить идентификаторы, чтобы они не совпадали в обоих макетах.

Другие вопросы по тегам