我写了一个简单的MotionEvent练习,其中我所做的就是记录事件的参数。我通过在主要活动中实施 OnTouchListener 并覆盖 onTouch()来实现这一目标。
对于一个按钮,我会在onTouch()的末尾返回 true 。没问题。
对于另一个按钮,我在onTouch()的末尾返回 false 。这是它变得有趣的地方。仅仅返回'false',就会发出一个致命的提示,其中包含一些我不太明白的暗示:“再循环两次!”。
这是什么意思?
更新:根据以下评论中的建议,我将从LogCat添加例外的详细信息:
03-08 10:35:14.275: ERROR/AndroidRuntime(521): FATAL EXCEPTION: main
03-08 10:35:14.275: ERROR/AndroidRuntime(521): java.lang.RuntimeException: MotionEvent{405215b0 action=0 x=66.0 y=78.0 pressure=1.0 size=0.0} recycled twice!
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at android.view.MotionEvent.recycle(MotionEvent.java:659)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at android.view.ViewRoot.handleMessage(ViewRoot.java:1880)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at android.os.Handler.dispatchMessage(Handler.java:99)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at android.os.Looper.loop(Looper.java:123)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at android.app.ActivityThread.main(ActivityThread.java:3647)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at java.lang.reflect.Method.invokeNative(Native Method)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at java.lang.reflect.Method.invoke(Method.java:507)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-08 10:35:14.275: ERROR/AndroidRuntime(521): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:4)
您是否正在回收,然后通过false
?
如果您返回false,框架将假定MotionEvent仍然有效,并且将使用它进行自己的处理。
来自docs:
回收MotionEvent,重新使用 由后来的来电者。打电话给这个 功能你永远不能触摸 事件再次发生。