android 中的 MotionLayout 不适用于多个 OnClick 转换
MotionLayout in android doesn't work with multiple OnClick transitions
我在使用 MotionLayout 时遇到问题。
我创建了一个场景,当我使用一个 onClick 转换时它可以工作。但是我需要两个。
我想做的是:当点击一个视图中的按钮时,这个视图会隐藏,而另一个视图会显示。这行得通。
但是现在当我在另一个视图中点击一个按钮时,我想显示第一个视图而第二个需要隐藏。
这种方法可行,唯一的问题是它没有转换。它只是显示。
我的场景是这样的:
<?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:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeOut">
<OnClick
motion:clickAction="transitionToEnd"
motion:targetId="@+id/hide_menu" />
</Transition>
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeInOut">
<OnClick
motion:clickAction="transitionToStart"
motion:targetId="@+id/quick_menu_show_menu" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/sidebar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:translationX="0dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
<Constraint
android:id="@+id/quick_menu"
android:layout_width="19dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:translationX="-70dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/sidebar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:translationX="-70dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
<Constraint
android:id="@+id/quick_menu"
android:layout_width="19dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:translationX="0dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
</MotionScene>
希望大家帮帮忙。
亲切的问候,
JKorsten
出于某种原因,这解决了问题,但我希望有人能解释这是为什么。
<Transition
motion:constraintSetEnd="@+id/start"
motion:constraintSetStart="@+id/end"
motion:duration="2000"
motion:motionInterpolator="easeIn">
<OnClick
motion:clickAction="transitionToStart"
motion:targetId="@+id/quick_menu_show_menu" />
</Transition>
正如我所读:它执行从 ConstraintSetEnd 到 ConstraintSetStart (transitionToStart) 的 easeIn,但我需要将 ConstraintSetEnd 更改为 @+id/start 并将 ConstraintSetStart 更改为 @+id/end.
我猜你必须添加另一个过渡集
你的第一个过渡集应该是这样的
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeIn">
<OnClick
motion:clickAction="transitionToEnd"
motion:targetId="@+id/quick_menu_show_menu" />
</Transition>
并在其下方添加另一个过渡集,如下所示
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeIn">
<OnClick
motion:clickAction="transitionToStart"
motion:targetId="@+id/(your another view ID)" />
</Transition>
希望有用
我在使用 MotionLayout 时遇到问题。 我创建了一个场景,当我使用一个 onClick 转换时它可以工作。但是我需要两个。
我想做的是:当点击一个视图中的按钮时,这个视图会隐藏,而另一个视图会显示。这行得通。 但是现在当我在另一个视图中点击一个按钮时,我想显示第一个视图而第二个需要隐藏。
这种方法可行,唯一的问题是它没有转换。它只是显示。
我的场景是这样的:
<?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:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeOut">
<OnClick
motion:clickAction="transitionToEnd"
motion:targetId="@+id/hide_menu" />
</Transition>
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeInOut">
<OnClick
motion:clickAction="transitionToStart"
motion:targetId="@+id/quick_menu_show_menu" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/sidebar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:translationX="0dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
<Constraint
android:id="@+id/quick_menu"
android:layout_width="19dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:translationX="-70dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/sidebar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:translationX="-70dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
<Constraint
android:id="@+id/quick_menu"
android:layout_width="19dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:translationX="0dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
</MotionScene>
希望大家帮帮忙。
亲切的问候,
JKorsten
出于某种原因,这解决了问题,但我希望有人能解释这是为什么。
<Transition
motion:constraintSetEnd="@+id/start"
motion:constraintSetStart="@+id/end"
motion:duration="2000"
motion:motionInterpolator="easeIn">
<OnClick
motion:clickAction="transitionToStart"
motion:targetId="@+id/quick_menu_show_menu" />
</Transition>
正如我所读:它执行从 ConstraintSetEnd 到 ConstraintSetStart (transitionToStart) 的 easeIn,但我需要将 ConstraintSetEnd 更改为 @+id/start 并将 ConstraintSetStart 更改为 @+id/end.
我猜你必须添加另一个过渡集
你的第一个过渡集应该是这样的
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeIn">
<OnClick
motion:clickAction="transitionToEnd"
motion:targetId="@+id/quick_menu_show_menu" />
</Transition>
并在其下方添加另一个过渡集,如下所示
<Transition
motion:constraintSetEnd="@+id/end"
motion:constraintSetStart="@+id/start"
motion:duration="2000"
motion:motionInterpolator="easeIn">
<OnClick
motion:clickAction="transitionToStart"
motion:targetId="@+id/(your another view ID)" />
</Transition>
希望有用