我正在覆盖SurfaceView的onTouchEvent()。每当我触摸手机屏幕时,都应该打印触摸事件的坐标。这是我的代码:
public class MyGestureActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate()");
panel = new MyGesturePanel(this);
setContentView(panel);
}
}
public class MyGesturePanel extends SurfaceView implements SurfaceHolder.Callback {
public boolean onTouchEvent(MotionEvent event) {
Log.i(TAG, "onTouchEvent! " + event.getX() + " " + event.getY());
return super.onTouchEvent(event);
}
}
如果我返回super.onTouchEvent(事件),即使我没有在屏幕上松开手指,它也只会打印1个事件(ACTION_DOWN)。我还尝试打印返回的内容并返回false。
现在,我没有使用super.onTouchEvent(event),而是返回true。当我将返回值设置为true时,它正常运行。当我将手指放在屏幕上时,会打印出大量的ACTION_MOVE事件。 (即使我不动我的手指)
为什么?难道我做错了什么?是否建议将“硬编码”返回真实?
谢谢!
答案 0 :(得分:3)
在onTouchEvent()中返回true告诉Android系统您已经处理了触摸事件,无需进一步处理。如果您返回false,Android系统将成为onTouch事件的处理程序,并将覆盖ACTION_DOWN之后的任何事件的代码(这是您触摸屏幕时的第一个事件)。