[android] Android에서 터치 위치를 얻는 방법은 무엇입니까?

안드로이드에서 터치 시작 위치 (X, Y), 터치 이동 위치 및 터치 끝 위치를 가져와야합니다.



답변

@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;
}

세 가지 경우는 서로 다른 유형의 이벤트에 반응 할 수 있도록하기위한 것입니다.이 예에서는 손가락을 다시 두드 리거나 끌거나 떼는 것입니다.


답변

추가 답변

주어진 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;
    }
};

어떤 관점에서 설정 :

myView.setOnTouchListener(handleTouch);

이렇게하면 터치 리스너가 할당 된 뷰에 상대적인 터치 이벤트 좌표가 제공됩니다. 보기의 왼쪽 상단은입니다 (0, 0). 뷰 위로 손가락을 움직이면 y음수가됩니다. 손가락을 뷰의 왼쪽으로 움직이면 x음수가됩니다.

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

장치 화면의 왼쪽 상단 모서리를 기준으로 좌표를 원하는 경우 원시 값을 사용하십시오.

int x = (int)event.getRawX();
int y = (int)event.getRawY();

관련


답변

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


답변

다음은 Koltin 스타일입니다. 저는 이것을 제 프로젝트에서 사용하며 매우 잘 작동합니다.

this.yourview.setOnTouchListener(View.OnTouchListener { _, event ->
        val x = event.x
        val y = event.y

        when(event.action) {
            MotionEvent.ACTION_DOWN -> {
                Log.d(TAG, "ACTION_DOWN \nx: $x\ny: $y")
            }
            MotionEvent.ACTION_MOVE -> {
                Log.d(TAG, "ACTION_MOVE \nx: $x\ny: $y")
            }
            MotionEvent.ACTION_UP -> {
                Log.d(TAG, "ACTION_UP \nx: $x\ny: $y")
            }
        }
        return@OnTouchListener  true
    })


답변