【发布时间】:2021-06-27 12:55:58
【问题描述】:
- 我将 MotionLayout 用于动画视图1。
- 我想以编程方式将约束 view1 更改为 view2。
- 我想在我的场景中使用不同的布局而不是使用 ConstrainsSet
所以,我有:
res/xml/activity_scene.xml
<Transition
android:id="@+id/transition1"
motion:constraintSetStart="@layout/activity_state1"
motion:constraintSetEnd="@layout/activity_state2">
// <..>
</Transition>
res/layout/activity_state1.xml
<androidx.constraintlayout.motion.widget.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/motionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/activity_scene">
// viev1 is small and view1 at left
/>
res/layout/activity_state2.xml
<androidx.constraintlayout.motion.widget.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/motionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/activity_scene">
// viev1 is big and view1 at center
/>
现在我想从 activity_state1 更改 view1 的约束(从左到右更改屏幕上的起始位置)。
因此,我知道如何更改约束,请参阅下面的代码:
MainActivity.kt
fun changeConstraint() {
motionLayout.getConstraintSet(**????**)?.let {
it.clear(R.id.img)
it.connect(R.id.view1, ConstraintSet.START, R.id.place2, ConstraintSet.START, 0)
it.connect(R.id.view1, ConstraintSet.TOP, R.id.place2, ConstraintSet.TOP, 0)
}
motionLayout.requestLayout()
}
我尝试使用另一种方法来改变约束中的位置。我尝试在约束和使用中使用motionLayout.applyTo(),并更改view1的layoutParams。另外,我试图改变 view1 的 XY。 Unforchenetly,它对我来说不能正常工作。因为 MotionLayout 不会改变动画的轨迹。或者没有任何变化。
因此,我应该将 ID 设置为 constraintSet 以便从 MainActivity 中找到它。 我想在我的场景中使用不同的布局,而不是在场景中声明带有 id 的 ConstraintSet,因为场景不能以视觉方式呈现布局。
2 个问题;
- 你知道如何获取我的 activity_state1.xml 的约束集吗?
- 你知道在 MotionLayout 中改变起始位置的另一种方法吗?
【问题讨论】:
标签: android android-constraintlayout android-motionlayout