如何在android中获得触控位置?
我需要在android中获得触摸开始位置(X,Y)、触摸移动位置和触摸结束位置如何在android中获得触控位置?,android,Android,我需要在android中获得触摸开始位置(X,Y)、触摸移动位置和触摸结束位置 @Override public boolean onTouch(View v, MotionEvent event) { float x = event.getX(); float y = event.getY(); return true; } 这三种情况下,您可以对不同类型的事件做出反应,在本例中,再次轻敲、拖动或抬起手指。补充答案 给定一个OnTou
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
return true;
}
这三种情况下,您可以对不同类型的事件做出反应,在本例中,再次轻敲、拖动或抬起手指。补充答案
给定一个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();
相关的
- 这是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
})
这是可行的,但是在我的测试中,添加了侦听器的视图不应该被其他视图覆盖。为了获得屏幕上触摸位置的绝对坐标,我添加了一个framelayout作为基本视图,并在其顶部添加了带有侦听器的视图。不要忘记
返回false
,否则它将消耗触控。@lenooh,getRawX()
和getRawY()
应返回添加侦听器的任何视图上触控位置的绝对坐标。但是你是对的,如果上面有另一个视图返回true
,那么就不会有较低的视图收到触摸事件的通知。苏拉奇:没错。由于我使用框架布局,我将视图设置为“matchParent”,因此getX()
和getY()
工作正常(无需getRawX/Y()
)。@Suragch是否可以录制触摸,即使触摸被其他视图覆盖或有类似按钮的子对象?@vigneshkumar,从下到上都会通知视图触摸事件(请参阅我答案底部的链接),这样您就可以在InterceptTouchEvent中记录事件,然后返回false
,这样事件就可以正常处理。为什么返回false?返回值true意味着触摸事件已被处理,这将阻止事件传播,反之亦然。
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
})