Введите анимацию, используя ConstraintSet - PullRequest
0 голосов
/ 06 мая 2018

Я хотел бы сделать вводную анимацию для активности, используя ConstraintSet, как показано в этом видео: https://www.youtube.com/watch?v=OHcfs6rStRo.

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

В onCreate я звоню:

setContentView(R.layout.layout_first_keyframe_detail);
topConstraintLayout = findViewById(R.id.top_constraint_layout);
constraintSet = new ConstraintSet();
constraintSet.clone(this, R.layout.layout_detail_top);

и тогда я бы хотел позвонить:

TransitionManager.beginDelayedTransition(topConstraintLayout);
constraintSet.applyTo(topConstraintLayout);

когда активность уже видна. К сожалению, я не нашел никакого метода жизненного цикла, чтобы сделать это.

Ответы [ 2 ]

0 голосов
/ 24 июля 2018

Если вы посмотрите на реализацию TransitionManager.beginDelayedTransiton(), вы увидите, что она начинается со следующей проверки: if (!sPendingTransitions.contains(sceneRoot) && sceneRoot.isLaidOut()) Изучив документацию по isLaidOut (), вы поймете, что представление должно быть нарисовано хотя бы один раз, чтобы можно было выполнить анимацию:

Возвращает истину, если этот вид прошел хотя бы один макет с последний раз он был прикреплен к окну или отделен от него.

Однако, завершение запуска анимации в сообщении сработало для меня. Поэтому вы должны попытаться сделать это так:

myView.post{ 
    TransitionManager.beginDelayedTransition(topConstraintLayout);
    constraintSet.applyTo(topConstraintLayout);
}
0 голосов
/ 06 мая 2018

для создания анимации с использованием ConstraintLayout и ConstraintSet вы должны сначала учесть, что должен быть начальный макет и конечный макет

Шаг 1. Создайте макеты

создайте свой начальный и конечный макет как хотите

-> предположим, что имя начального макета (активность), имя конечного макета (активность_альт)

Шаг 2. Создание анимации

теперь в MainActivity внутри onCreate метода, вызывающего вашу функцию foo

    private void foo() {
    var set = false
    val constraint1 = ConstraintSet()
    constraint1.clone(root)
    val constraint2 = ConstraintSet()
    constraint2.clone(this, R.layout.activity_alt)


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            TransitionManager.beginDelayedTransition(root)
            val constraint = if(set) constraint1 else constraint2
            constraint.applyTo(root)
            set = !set
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...