我对 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>