如何从视图触摸事件得到正确的值

问题描述:

我在GLSurfaceView上实现触摸事件时遇到问题。视图大小为1280x696,因为Android(平板电脑)状态栏底部有软键,时间等。(屏幕分辨率为1280x800),但OnTouchListener正在接收带有坐标[646.0,739.0]的触摸事件,因此我的gluunproject方法无法返回正确的值 有没有办法返回尊重这些边界的事件?或者我应该如何重新计算职位?如何从视图触摸事件得到正确的值

一般来说这样的坐标系之间进行转换:如果从系统转换到B和你有个

  • AOrigin(接收机鉴于左上角)
  • A端(右底角您的接收器视图(产地+大小))
  • BOrigin(左您的GL鉴于上角)您的GL鉴于
  • 弯曲(右下角(产地+大小))

其中AOrigin和BOrigin代表相同的位置视图和接收机观点同样适用于A端和弯曲 然后点P:

X = B.Origin.x + ((P.x - AOrigin.x)/(AEnd.x - AOrigin.x)) * (BEnd.x - B.Origin.x) 
Y = B.Origin.y + ((P.y - AOrigin.y)/(AEnd.y - AOrigin.y)) * (BEnd.y - B.Origin.y) 

对于你的情况(我是因为缺乏不知道信息)AOrigin为(0,0),A端为(646,739),BOrigin为(0,0)和弯曲是在(1280,800):

X = P.x/646 * 1280 
Y = P.y/739 * 800 

您也可以使用此从“GL”坐标转换到/从“GL”坐标转换。一个常见的情况是在(0,0)左上角和(1280,800)下方的底部以及您的“GL”坐标从(-1,1)到(1,-1)的视图中:

X = -1 + (P.x/1280)*2 
Y = 1 + (P.y/800)*(-2) 

另外请注意,您可以使用任意两个点对,只要在屏幕上代表相同的位置(origin-end).x != 0(origin-end).y != 0