MotionLayout - 滑动时的单一连续过渡?
MotionLayout - Single continuous transition on swipe?
我有四种不同的布局,可以通过向左滑动一个接一个地滑动。
当一个过渡完成后,我希望能够继续向左滑动以继续另一个过渡。向下滑动时,所有布局都有自己的过渡效果。我目前有很多转换,每次按下按钮时都会设置 transitionToState()
。
现在有没有办法在 MotionLayout 中通过滑动操作实现这一点? A way to chain transitions into one single transition by swiping left each time.
如果它不与 nestedScrollView(如回收视图)相关联,则简短回答是肯定的。
一般来说,如果您有 3 个状态 A、B 和 C 以及两个转换 A->B 和 B->C,并且 OnSwipe 都在同一方向上。他们自然会“连锁”
IE。
Width touch down 在状态 A 下,它会将 A 拖到 B,然后将 B 拖到 C。
在B前补上,停在B.
没有简单的方法可以防止 B 成为有效止损点。
本 video
中有关 onSwipe 的更多详细信息
例如这个布局文件:
<?xml version="1.0" encoding="utf-8"?>
<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"
android:background="#FF003b60"
app:layoutDescription="@xml/scene"
app:motionDebug="SHOW_PATH">
<View
android:id="@+id/view"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#5F3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.motion.widget.MotionLayout>
使用 MotionScene 文件:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetStart="@id/a"
motion:constraintSetEnd="@+id/b">
<OnSwipe motion:dragDirection="dragRight" />
</Transition>
<Transition
motion:constraintSetStart="@id/b"
motion:constraintSetEnd="@+id/c">
<OnSwipe motion:dragDirection="dragRight" />
</Transition>
<ConstraintSet android:id="@+id/a">
<ConstraintOverride android:id="@+id/view"
motion:layout_constraintHorizontal_bias="0" />
</ConstraintSet>
<ConstraintSet android:id="@+id/b"/>
<ConstraintSet android:id="@+id/c">
<ConstraintOverride android:id="@id/view"
motion:layout_constraintHorizontal_bias="1" />
</ConstraintSet>
</MotionScene>
这个 Motion 场景有 3 个 ConstraintSets a、b 和 c 它还有两个过渡 a->b 和 b->c 都在滑动上
我有四种不同的布局,可以通过向左滑动一个接一个地滑动。
当一个过渡完成后,我希望能够继续向左滑动以继续另一个过渡。向下滑动时,所有布局都有自己的过渡效果。我目前有很多转换,每次按下按钮时都会设置 transitionToState()
。
现在有没有办法在 MotionLayout 中通过滑动操作实现这一点? A way to chain transitions into one single transition by swiping left each time.
如果它不与 nestedScrollView(如回收视图)相关联,则简短回答是肯定的。
一般来说,如果您有 3 个状态 A、B 和 C 以及两个转换 A->B 和 B->C,并且 OnSwipe 都在同一方向上。他们自然会“连锁”
IE。
Width touch down 在状态 A 下,它会将 A 拖到 B,然后将 B 拖到 C。
在B前补上,停在B.
没有简单的方法可以防止 B 成为有效止损点。
本 video
中有关 onSwipe 的更多详细信息例如这个布局文件:
<?xml version="1.0" encoding="utf-8"?>
<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"
android:background="#FF003b60"
app:layoutDescription="@xml/scene"
app:motionDebug="SHOW_PATH">
<View
android:id="@+id/view"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#5F3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.motion.widget.MotionLayout>
使用 MotionScene 文件:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetStart="@id/a"
motion:constraintSetEnd="@+id/b">
<OnSwipe motion:dragDirection="dragRight" />
</Transition>
<Transition
motion:constraintSetStart="@id/b"
motion:constraintSetEnd="@+id/c">
<OnSwipe motion:dragDirection="dragRight" />
</Transition>
<ConstraintSet android:id="@+id/a">
<ConstraintOverride android:id="@+id/view"
motion:layout_constraintHorizontal_bias="0" />
</ConstraintSet>
<ConstraintSet android:id="@+id/b"/>
<ConstraintSet android:id="@+id/c">
<ConstraintOverride android:id="@id/view"
motion:layout_constraintHorizontal_bias="1" />
</ConstraintSet>
</MotionScene>
这个 Motion 场景有 3 个 ConstraintSets a、b 和 c 它还有两个过渡 a->b 和 b->c 都在滑动上