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

最佳答案

当然,只需在您的父类中处理onTouch事件。
然后确定您正在使用它以及将其发送给什么。

onTouch(touchEvent){
    motionLayout.doClickIfYouWant(touchEvent)
    motionLayout.doSwipeIfYouWant(touchEvent)
}


伪代码,但是如果您先捕获它并确定谁得到它,则可以将其发送给两个人。同样不要忘记从onTouch回调返回已处理的布尔标志,以确保不会被两次处理。最后,如果其他项目在屏幕上是可触摸的,则可能必须检查触摸的x,y以确定它是否应转到motionLayout或只是返回“ not handle”,并让本机行为将触摸传递通过。

希望能有所帮助。同样,如果motionLayout类没有公开将正确的触摸事件发送到一个以上的位置所需的触摸方法,则仍然可以使用反射来获取它。当然,反射可能会稍慢一些,因此请谨慎使用,但是对于布局类,我不得不这样做,因为该类具有需要移动的子级图像,并在父级级别控制触摸来确定是否需要image是否获得它,但是它不是公开可用的,所以我查看了代码并通过反射触摸了它,没有任何问题。不过,把它当作最后的手段,也许您需要的所有东西都暴露了。

还应注意一些工程师鄙视反射大声笑,因此请谨慎编写代码。

08-18 12:14