【问题标题】:MotionLayout - Single continuous transition on swipe?MotionLayout - 滑动时的单个连续过渡?
【发布时间】:2021-12-22 23:09:53
【问题描述】:

我有四种不同的布局,可以通过向左滑动依次滑动。

当一个过渡完成时,我希望能够在进一步向左滑动时继续进行另一个过渡。向下滑动时,所有布局都有自己的过渡。我目前有很多转换,每次按下按钮时都设置transitionToState()

到目前为止,有没有办法在 MotionLayout 中通过滑动操作来实现这一点? A way to chain transitions into one single transition by swiping left each time.

【问题讨论】:

    标签: java android kotlin android-constraintlayout android-motionlayout


    【解决方案1】:

    如果它不与nestedScrollView 相关联(如回收站视图),简短的回答是肯定的。

    一般来说,如果您有 3 个状态 A、B 和 C 以及两个转换 A->B 和 B->C,并且 OnSwipe 在两个状态中的方向相同。他们自然会“连锁” IE。 宽度在状态 A 下着陆,它将把 A 拖到 B,然后将 B 拖到 C。 在 B 之前补漆,它会停在 B。
    没有简单的方法可以防止 B 成为有效止损。

    更多关于 onSwipe 的详情请看video

    例如这个布局文件:

    <?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>
    

    这个运动场景有 3 个约束集 a、b 和 c 它还有两个转换 a->b 和 b->c 在滑动时都有

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 2020-02-02
      • 1970-01-01
      • 2020-11-29
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多