java onTouchEvent、状态栏和画布在坐标系中的差异
我已经创建了一个自定义View
想象一下一个Rect
画在它的Canvas
在x = 100
,y = 100
,width = 100
,height = 100
深蓝色(或任何你喜欢的颜色)
现在我关闭状态栏->
应用程序正在全屏运行
试想一下,在矩形的中间,我会触摸<强>精确< /强>。br/>
坐标应该是150, 150
——正如它们应该是的那样,它们是150, 150
但是现在我激活状态栏->
画布缩小了一点
->
如果你看屏幕,在状态栏下方150px
会画一个矩形——这就是我想要的
现在我在矩形的中间再次触摸<强>精确< /强>。br/>
坐标应该是150, 150
,
但是<天啊--
onTouchEvent
坐标包括状态栏高度
而且Canvas
坐标确实不是
那么我该怎么做才能得到正确的touch coordinates
# 1 楼答案
您使用什么方法从MotionEvent获取x和y?你试过getRawX()和getRawY()吗
-更新
对不起,我想我误解了什么。你用什么方法?getY()还是getRawY()
-再次更新-
你是在活动中处理这件事吗?我在这里编写了一些测试代码:
一个红点代表getY(),一个绿点代表getRawY()。我已经在emulator(我可以使用鼠标模拟“精确”的手指触摸)和真实设备中对其进行了测试。在这两种情况下,我都能看到红色圆点被精确地画在我触摸的地方,而绿色圆点则被画在红色圆点的下方(正好是状态栏的高度)
但如果在活动中处理onTouchEvent(),则getY()和getRawY()返回相同的值