我们可以在 Android MotionLayout 的同一个 <Transition> 中使用 OnSwipe 和 OnClick 吗?

Rus*_*iev 4 android android-layout android-constraintlayout

我想在用户单击滑动时播放动画。但是我们可以在 MotionLayout 中处理这两种行为吗?它们可以完美地分开工作,但如果我在同一场景中添加OnClickOnSwipe ,则只有OnClick有效。有什么解决方法吗?

RWI*_*WIL 5

是的,您可以通过从 MotionScene 中删除 onClick 行为来解决此问题,并通过扩展 MotionLayout 和重写来自行实现单击dispatchTouchEvent

在此函数中,您可以决定触摸事件是否是您希望发生 onClick 行为的“目标区域”内的单击。

override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        if (touchEventInsideTargetView(clickableArea, ev)) {
            when (ev.action) {
                MotionEvent.ACTION_DOWN -> {
                    startX = ev.x
                    startY = ev.y
                }
                MotionEvent.ACTION_UP   -> {
                    val endX = ev.x
                    val endY = ev.y
                    if (isAClick(startX!!, endX, startY!!, endY)) {
                        if (doClickTransition()) {
                            return true
                        }
                    }
                }
            }
        }
 return super.dispatchTouchEvent(ev)
}
Run Code Online (Sandbox Code Playgroud)

有关此内容的帖子和完整的代码示例可以在这里找到: https ://medium.com/vrt-digital-studio/picture-in-picture-video-overlay-with-motionlayout-a9404663b9e7