MotionLayout 仅在第一次 ACTION_UP 后动画

问题描述 投票:0回答:0

我对 MotionLayout (XML) 有疑问。我在 motionlayout 中创建水平回收视图。我已经拦截了 OnTouch,但只有在第一次 ACTION_UP 之后转换才有效。所以第一次打开屏幕时,动画不起作用。在我触摸它并抬起手指触发 ACTION_UP 之后,它现在可以工作了。

所以流程是这样的: 打开屏幕 -> 滑动 -> ACTION_MOVE 发生,但动画不工作 -> 抬起手指 -> ACTION_UP 发生 -> 再次滑动,现在动画工作。

我已经设置了一个监听器,并且可以确认它甚至在第一次 ACTION_UP 之前就没有开始。

GIF可以看到here.

为什么会发生,如何解决?

我的onTouchListener

binding.rvPoster.setOnTouchListener { v, event ->
    Log.d("OnTouchListener", "event: $event")
    binding.motionLayoutHorizontal.onTouchEvent(event)
    return@setOnTouchListener false
}

我的动作场景:

<?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:constraintSetEnd="@+id/end"
        app:constraintSetStart="@id/start"
        app:duration="1000">
        <KeyFrameSet></KeyFrameSet>
        <OnSwipe
            app:dragDirection="dragEnd"
            app:touchRegionId="@id/rvPoster"
            app:onTouchUp="stop"/>
    </Transition>

    <ConstraintSet android:id="@+id/start"></ConstraintSet>

    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@+id/ivLogo"
            android:layout_width="140dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/btnSeeAll" />
        <Constraint
            android:id="@+id/rvPoster"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/btnSeeAll" />
        <Constraint
            android:id="@+id/verticalGuideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintGuide_begin="20dp" />
    </ConstraintSet>
</MotionScene>
android android-constraintlayout android-motionlayout
© www.soinside.com 2019 - 2024. All rights reserved.