如何在Android中获得Touch位置?

Ale*_*lex 89 android

我需要在android中获得触摸开始位置(X,Y),触摸移动位置和触摸屏幕的结束位置.

dbr*_*der 160

@Override
public boolean onTouchEvent(MotionEvent event)
{
    int x = (int)event.getX();
    int y = (int)event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

这三种情况是您可以对不同类型的事件做出反应,在此示例中,再次点击或拖动或抬起手指.

  • 为什么返回假? (6认同)
  • 返回值 true 意味着触摸事件已被处理,这将阻止事件传播,反之亦然。 (2认同)

Sur*_*gch 22

补充答案

鉴于 OnTouchListener

private View.OnTouchListener handleTouch = new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        int x = (int) event.getX();
        int y = (int) event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.i("TAG", "touched down");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.i("TAG", "moving: (" + x + ", " + y + ")");
                break;
            case MotionEvent.ACTION_UP:
                Log.i("TAG", "touched up");
                break;
        }

        return true;
    }
};
Run Code Online (Sandbox Code Playgroud)

设置一些视图:

myView.setOnTouchListener(handleTouch);
Run Code Online (Sandbox Code Playgroud)

这将为您提供相对于分配了触摸侦听器的视图的触摸事件坐标.视图的左上角是(0, 0).如果您将手指移到视图上方,那么y将为负数.如果你将手指向左移动,那么x将是负面的.

int x = (int)event.getX();
int y = (int)event.getY();
Run Code Online (Sandbox Code Playgroud)

如果您想要相对于设备屏幕左上角的坐标,请使用原始值.

int x = (int)event.getRawX();
int y = (int)event.getRawY();
Run Code Online (Sandbox Code Playgroud)

有关


Sep*_*phy 11

@Override
    public boolean onTouch(View v, MotionEvent event) {
       float x = event.getX();
       float y = event.getY();
       return true;
    }
Run Code Online (Sandbox Code Playgroud)