【问题标题】:How to get right values from Views touch event如何从 Views 触摸事件中获取正确的值
【发布时间】:2012-09-22 10:30:38
【问题描述】:

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

【问题讨论】:

    标签: android opengl-es touch glsurfaceview


    【解决方案1】:

    一般来说,在这样的坐标系之间过渡:如果你从系统 A 过渡到 B 并且你有点

    • AOrigin(接收器视图的左上角)
    • AEnd(接收器视图的右下角(原点 + 大小))
    • BOrigin(GL 视图的左上角)
    • BEnd(您的 GL 视图的右下角(原点 + 大小))

    其中 AOrigin 和 BOrigin 表示视图中的相同位置,AEnd 和 BEnd 也是如此 那么对于receiver view中的点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),AEnd 位于 (646, 739),BOrigin 位于 (0,0),BEnd 位于 (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 AND (origin-end).y != 0,您可以使用任意两对代表屏幕上相同位置的点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      相关资源
      最近更新 更多