Возможны ли анимации ConstraintLayout в ScrollView? - PullRequest
0 голосов
/ 17 июня 2020

Всякий раз, когда я пытаюсь применить анимацию ConstraintLayout к прокручиваемому constraintLayout, я получаю сообщение об ошибке, что я не могу преобразовать ScrollView в ConstraintLayout, и это звучит разумно.

Есть ли способ наложить ограничение макет прокручивается без использования ScrollView в качестве родительского? Так я смогу использовать его милые анимации.

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

НАБОР ОГРАНИЧЕНИЙ ДЛЯ МАКЕТА ОГРАНИЧЕНИЙ, ЧТО НЕ РОДИТЕЛЬСКИЙ

Я понял это. Это творит чудеса. Я думаю, что это может быть полезно для других разработчиков, потому что я считаю вполне нормальным использовать ConstraintLayout внутри ScrollView, например, на экранах входа в систему.

Итак, теперь у меня 2 Xmls, верно? «Исходный» и переходный.

Original: <ScrollView> <ConstraintLayout><ConstraintLayout> <ScrollView>
Transition: <ConstraintLayout></ConstraintLayout>

Переход XML не имеет ScrollView, потому что мне нужно клонировать полный макет (мой макет перехода) внутри ViewGroup (дочерний элемент ScrollView, мой макет ограничения). Если вы попытаетесь клонировать макет дочернего ограничения в другой макет дочернего ограничения, он выйдет из строя с помощью метода .getChild (), не знаю почему. Но вы можете клонировать макет ConstraintLayout в представление ConstraintLayout.

val constraintSet = ConstraintSet()
constraintSet.clone(this, R.layout.activity_login_transition) // here I'm cloning the whole transition layout
TransitionManager.beginDelayedTransition(login_constraint) //this is only for animation
constraintSet.applyTo(login_constraint) // and here I'm applying it only to my constraint layout. 'login_constraint' is my constraint's ID

И все. Надеюсь, это сработало и для вас.

Спасибо Ezequiel Zanetta

1 голос
/ 17 июня 2020

Это обычная проблема с ConstraintLayout и ScrollView / NestedScrollView. Вам нужно установить свой ScrollView в качестве родительского для ConstraintLayout, и перед выполнением перехода вам необходимо клонировать свой ConstraintLayout

Примерно так:

Kotlin:

 ConstraintSet().apply {
        clone(constraintLayoutView);
        clone(this, R.layout.activity_animation) // your transition
    }

Или, если вы используете java:

  ConstraintSet constraintSet = new ConstraintSet();
  constraintSet.clone(constraintLayoutView);
  constraintSet.clone(this, R.layout.activity_animation); 
...