每当我尝试在可滚动的ConstraintLayout上应用constraintLayout动画时,我都会收到错误消息,说我无法将ScrollView转换为ConstraintLayout,这听起来很合理。
有没有一种方法可以让约束布局在不使用ScrollView作为父布局的情况下可滚动?这样我就可以使用它可爱的动画了。
谢谢。
发布于 2020-06-17 16:39:45
这是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);
发布于 2020-06-17 19:50:39
非父级约束布局的约束集
我想通了。这真是个奇迹。我认为这可能对其他开发人员有用,因为我假设在ScrollView中使用ConstraintLayout是很正常的,例如在登录屏幕中。
所以现在我有2个Xmls了,对吗?“原始”和“过渡”。
Original: <ScrollView> <ConstraintLayout><ConstraintLayout> <ScrollView>
Transition: <ConstraintLayout></ConstraintLayout>
Transition 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
https://stackoverflow.com/questions/62433620
复制相似问题