是否可以在 MotionLayout 中有两个滑动处理程序?
Is it possible to have two swipe handlers in a MotionLayout?
我想从 Google Play 商店(或许多其他 google 应用程序)重新创建一个菜单(参见下面的屏幕截图),但我不知道如何操作。
Screenshot of the menu
我尝试将 MotionLayout 与两个垂直滑动处理程序(一个带 dragUp,另一个带 dragDown)一起使用,以在 DialogFragment 上播放两种不同的过渡,但它不起作用...
我的fragment_dialog_scene.xml
.
<?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/start"
motion:constraintSetEnd="@+id/end" >
<OnSwipe
motion:touchAnchorId="@+id/frameLayout2"
motion:dragDirection="dragUp"
motion:touchAnchorSide="top" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="78dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp">
<CustomAttribute
motion:attributeName="radius"
motion:customPixelDimension="2.5dp" />
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CustomAttribute
motion:attributeName="radius"
motion:customPixelDimension="0dp" />
</Constraint>
</ConstraintSet>
<ConstraintSet
android:id="@+id/dismiss"
motion:deriveConstraintsFrom="@+id/start" >
<Constraint
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="350dp" />
</ConstraintSet>
<Transition
motion:constraintSetStart="@+id/start"
motion:constraintSetEnd="@+id/dismiss" >
<OnSwipe
motion:touchAnchorId="@+id/frameLayout2"
motion:dragDirection="dragUp"
motion:touchAnchorSide="top" />
<OnClick />
</Transition>
</MotionScene>
我的fragment_dialog.xml
.
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/motion_layout"
app:layoutDescription="@xml/fragment_dialog_scene">
<View
android:id="@+id/background_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"/>
<androidx.cardview.widget.CardView
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginHorizontal="16dp"
app:cardCornerRadius="8dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/nested_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"/>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.motion.widget.MotionLayout>
PS: 我不会写评论,我没有足够的声誉,但是如果我需要添加一些东西,你可以让我编辑post。
转换在状态(ConstraintSets - 代表整个 MotionLayout ViewGroup)之间运行。
你可以有 3 个状态,比如 A、B 和 C,还有两个转换,比如 t1 和 t2
这样 t1 是 B 到 A 的转换
t2 是 B 到 C 的转换。
两者都有一个向上滑动另一个向下滑动 ( A <-t1- B -t2-> C
)
然后在 B 中时,您将能够滑动到 A 或 C。
常见的错误是将它们视为动作。
t1开X t2开Y,为什么我不能开X开Y?
问题是描述了 4 个状态关闭,x 打开,y 打开和,x & y 打开。
然后,如果您需要在所有 4 个状态之间进行更多转换。
最新的 android 计算器就是一个很好的例子,它有 9 个状态。
我想从 Google Play 商店(或许多其他 google 应用程序)重新创建一个菜单(参见下面的屏幕截图),但我不知道如何操作。 Screenshot of the menu
我尝试将 MotionLayout 与两个垂直滑动处理程序(一个带 dragUp,另一个带 dragDown)一起使用,以在 DialogFragment 上播放两种不同的过渡,但它不起作用...
我的fragment_dialog_scene.xml
.
<?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/start"
motion:constraintSetEnd="@+id/end" >
<OnSwipe
motion:touchAnchorId="@+id/frameLayout2"
motion:dragDirection="dragUp"
motion:touchAnchorSide="top" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="78dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp">
<CustomAttribute
motion:attributeName="radius"
motion:customPixelDimension="2.5dp" />
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CustomAttribute
motion:attributeName="radius"
motion:customPixelDimension="0dp" />
</Constraint>
</ConstraintSet>
<ConstraintSet
android:id="@+id/dismiss"
motion:deriveConstraintsFrom="@+id/start" >
<Constraint
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="350dp" />
</ConstraintSet>
<Transition
motion:constraintSetStart="@+id/start"
motion:constraintSetEnd="@+id/dismiss" >
<OnSwipe
motion:touchAnchorId="@+id/frameLayout2"
motion:dragDirection="dragUp"
motion:touchAnchorSide="top" />
<OnClick />
</Transition>
</MotionScene>
我的fragment_dialog.xml
.
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/motion_layout"
app:layoutDescription="@xml/fragment_dialog_scene">
<View
android:id="@+id/background_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"/>
<androidx.cardview.widget.CardView
android:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginHorizontal="16dp"
app:cardCornerRadius="8dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/nested_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"/>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.motion.widget.MotionLayout>
PS: 我不会写评论,我没有足够的声誉,但是如果我需要添加一些东西,你可以让我编辑post。
转换在状态(ConstraintSets - 代表整个 MotionLayout ViewGroup)之间运行。
你可以有 3 个状态,比如 A、B 和 C,还有两个转换,比如 t1 和 t2
这样 t1 是 B 到 A 的转换
t2 是 B 到 C 的转换。
两者都有一个向上滑动另一个向下滑动 ( A <-t1- B -t2-> C
)
然后在 B 中时,您将能够滑动到 A 或 C。
常见的错误是将它们视为动作。 t1开X t2开Y,为什么我不能开X开Y? 问题是描述了 4 个状态关闭,x 打开,y 打开和,x & y 打开。 然后,如果您需要在所有 4 个状态之间进行更多转换。
最新的 android 计算器就是一个很好的例子,它有 9 个状态。