How to get the Touch position in android?
我需要在android中获得触摸开始位置(X,Y),触摸移动位置和触摸屏幕的结束位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @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; } |
这三种情况是您可以对不同类型的事件做出反应,在此示例中再次点击或拖动或抬起手指。
补充答案
给定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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; } }; |
设置一些视图:
1 | myView.setOnTouchListener(handleTouch); |
这将为您提供相对于分配了触摸侦听器的视图的触摸事件坐标。视图的左上角是
1 2 | int x = (int)event.getX(); int y = (int)event.getY(); |
如果您想要相对于设备屏幕左上角的坐标,请使用原始值。
1 2 | int x = (int)event.getRawX(); int y = (int)event.getRawY(); |
有关
- Android触摸事件是如何传递的?
1 2 3 4 5 6 | @Override public boolean onTouch(View v, MotionEvent event) { float x = event.getX(); float y = event.getY(); return true; } |
这是Koltin风格,我在我的项目中使用它并且它非常有效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 x: $x y: $y") } MotionEvent.ACTION_MOVE -> { Log.d(TAG,"ACTION_MOVE x: $x y: $y") } MotionEvent.ACTION_UP -> { Log.d(TAG,"ACTION_UP x: $x y: $y") } } return@OnTouchListener true }) |
您可以实现一个Gesture演绎器,并在其onfling事件中从MotionEvent类中获取两个参数。您可以从中获取x和y坐标。请留意这篇文章了解更多详情
网格布局上的手势检测