Как получить правильные значения из сенсорного события Views

У меня проблема с реализацией сенсорных событий на GLSurfaceView. Размер просмотра составляет 1280x696 из-за строки состояния Android (планшета) внизу с программными клавишами, временем и т. д. (разрешение экрана 1280x800), но OnTouchListener получает сенсорные события с координатами [646.0,739.0], и, таким образом, мой метод gluunproject не возвращает правильные значения. Есть ли способ вернуть события, соответствующие этим границам? или как мне пересчитать позицию?


person Pinker    schedule 22.09.2012    source источник


Ответы (1)


В общем, для перехода между такими системами координат: Если вы переходите из системы A в B и у вас есть точки

  • AOrigin (левый верхний угол вашего ресивера)
  • AEnd (правый нижний угол вашего приемника (исходное положение + размер))
  • BOrigin (левый верхний угол вашего представления GL)
  • BEnd (правый нижний угол вашего представления GL (происхождение + размер))

где AOrigin и BOrigin представляют одно и то же местоположение в поле зрения, и то же самое относится к AEnd и BEnd, а затем к точке 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". Распространенным случаем является представление с верхним левым углом в (0, 0) и нижним нижним в (1280, 800), а ваши координаты «GL» от (-1, 1) до (1, -1):

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

Также обратите внимание, что вы можете использовать любые 2 пары точек, которые представляют одно и то же место на экране, если (origin-end).x != 0 И (origin-end).y != 0

person Matic Oblak    schedule 24.09.2012