为什么返回true onSurfaceView onTouchEvent()?

时间:2011-11-10 11:33:03

标签: android surfaceview ontouchevent

我正在覆盖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事件。 (即使我不动我的手指)

为什么?难道我做错了什么?是否建议将“硬编码”返回真实?

谢谢!

1 个答案:

答案 0 :(得分:3)

在onTouchEvent()中返回true告诉Android系统您已经处理了触摸事件,无需进一步处理。如果您返回false,Android系统将成为onTouch事件的处理程序,并将覆盖ACTION_DOWN之后的任何事件的代码(这是您触摸屏幕时的第一个事件)。