您使用什么方法从 MotionEvent 中获取 x 和 y?您是否尝试过 getRawX() 和 getRawY()?
- -更新 -
对不起,我想我误解了一些东西。你用了什么方法?getY() 还是 getRawY()?
---再次更新---
你在 Activity 中处理 onTouchEvent 吗?这里我写了一些代码进行测试:
public class CustomView extends View {
private final Paint p = new Paint();
private final Paint p2 = new Paint();
private float lastRawX = 0, lastRawY = 0;
private float lastX = 0, lastY = 0;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
p.setColor(0xFFFF0000);
p2.setColor(0xFF00FF00);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
lastX = event.getX();
lastY = event.getY();
lastRawX = event.getRawX();
lastRawY = event.getRawY();
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
// make the touch point big enough to be noticed.
canvas.drawCircle(lastX, lastY, 3, p);
canvas.drawCircle(lastRawX, lastRawY, 3, p2);
}
}
getY() 的红点和 getRawY() 的绿点。我已经在模拟器(我可以使用鼠标来模拟“准确”的手指触摸)和真实设备中对其进行了测试。在两者中,我都可以看到红点恰好绘制在我触摸的位置,而绿点绘制在红色下方(恰好是状态栏的高度)。
但如果在活动中处理 onTouchEvent(),则 getY() 和 getRawY() 返回相同的值。