除了 MotionLayout 过渡之外还添加滑动手势
Add swipe gestures in addition to MotionLayout transition
我正在使用带有 dragUp
转换的 MotionLayout 设置来切换视图上的某些布局。 (基本上你可以向上拖动以查看更多信息。)但是,我也希望能够支持“向左滑动”和“向右滑动”手势来触发应用程序中的其他内容,但我不知道如何听在不破坏我的 MotionLayout 转换的情况下滑动事件。
如果我在我的视图上设置 OnTouchListener,我可以看到滑动事件,但这似乎会破坏 MotionLayout 转换,因为我不能再向上拖动以获得额外信息。
我想我可能需要一些方法来在我的 OnTouchListener 中“传递”滑动事件 up/down,但仅调用 super.onFling...
似乎不起作用。否则我希望有一种不同的方法来实现我还没有偶然发现的滑动功能...
如有任何建议,我们将不胜感激!
您只需要像这样在它们之间添加更多的 ConstraintSets 和 Transitions:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
app:constraintSetStart="@id/start"
app:constraintSetEnd="@id/middle">
<OnSwipe
app:touchAnchorId="@id/square"
app:dragDirection="dragUp"
app:touchAnchorSide="top"/>
</Transition>
<Transition
app:constraintSetStart="@id/middle"
app:constraintSetEnd="@id/left">
<OnSwipe
app:touchAnchorId="@id/square"
app:dragDirection="dragLeft"
app:touchAnchorSide="left"/>
</Transition>
<Transition
app:constraintSetStart="@id/middle"
app:constraintSetEnd="@id/right">
<OnSwipe
app:touchAnchorId="@id/square"
app:dragDirection="dragRight"
app:touchAnchorSide="left"/>
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint android:id="@id/square">
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/middle">
<Constraint android:id="@id/square" >
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/left">
<Constraint android:id="@id/square" >
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/right">
<Constraint android:id="@id/square" >
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
</MotionScene>
如果你想看一个有趣的工作示例here's a sliding tile puzzle I did。
我正在使用带有 dragUp
转换的 MotionLayout 设置来切换视图上的某些布局。 (基本上你可以向上拖动以查看更多信息。)但是,我也希望能够支持“向左滑动”和“向右滑动”手势来触发应用程序中的其他内容,但我不知道如何听在不破坏我的 MotionLayout 转换的情况下滑动事件。
如果我在我的视图上设置 OnTouchListener,我可以看到滑动事件,但这似乎会破坏 MotionLayout 转换,因为我不能再向上拖动以获得额外信息。
我想我可能需要一些方法来在我的 OnTouchListener 中“传递”滑动事件 up/down,但仅调用 super.onFling...
似乎不起作用。否则我希望有一种不同的方法来实现我还没有偶然发现的滑动功能...
如有任何建议,我们将不胜感激!
您只需要像这样在它们之间添加更多的 ConstraintSets 和 Transitions:
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
app:constraintSetStart="@id/start"
app:constraintSetEnd="@id/middle">
<OnSwipe
app:touchAnchorId="@id/square"
app:dragDirection="dragUp"
app:touchAnchorSide="top"/>
</Transition>
<Transition
app:constraintSetStart="@id/middle"
app:constraintSetEnd="@id/left">
<OnSwipe
app:touchAnchorId="@id/square"
app:dragDirection="dragLeft"
app:touchAnchorSide="left"/>
</Transition>
<Transition
app:constraintSetStart="@id/middle"
app:constraintSetEnd="@id/right">
<OnSwipe
app:touchAnchorId="@id/square"
app:dragDirection="dragRight"
app:touchAnchorSide="left"/>
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint android:id="@id/square">
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/middle">
<Constraint android:id="@id/square" >
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/left">
<Constraint android:id="@id/square" >
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/right">
<Constraint android:id="@id/square" >
<Layout
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</Constraint>
</ConstraintSet>
</MotionScene>
如果你想看一个有趣的工作示例here's a sliding tile puzzle I did。