안드로이드에서 터치 시작 위치 (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
})
답변
