I need to get the touch begin position (X, Y) , touch move position and touch end position of the screen in android.
4 Answers
@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; } The three cases are so that you can react to different types of events, in this example tapping or dragging or lifting the finger again.
2 Comments
Supplemental answer
Given an 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; } }; set on some view:
myView.setOnTouchListener(handleTouch); This gives you the touch event coordinates relative to the view that has the touch listener assigned to it. The top left corner of the view is (0, 0). If you move your finger above the view, then y will be negative. If you move your finger left of the view, then x will be negative.
int x = (int)event.getX(); int y = (int)event.getY(); If you want the coordinates relative to the top left corner of the device screen, then use the raw values.
int x = (int)event.getRawX(); int y = (int)event.getRawY(); Related
5 Comments
return false otherwise it will consume the touch.getRawX() and getRawY() should return the absolute coordinates of the touch position on any view the listener is added to. But you're right, if there is another view on top of it that returns true, then no lower views will be notified of touch events.getX() and getY() work just fine (no need for getRawX/Y()).onInterceptTouchEvent and then return false so that the event is processed as normal.Here is the Koltin style, I use this in my project and it works very well:
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 })