でのタッチ イベントの実装に問題がありますGLSurfaceView
。ビューのサイズは 1280x696 です。下部に Android (タブレット) のステータス バーがあり、ソフト キーや時間などが表示されているためです (画面の解像度は 1280x800) OnTouchListener
。正しい値を返すには、これらの境界を尊重するイベントを返す方法はありますか? または、どのように位置を再計算する必要がありますか?
1 に答える
2
一般に、このような座標系間の移行: システム 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)
(origin-end).x != 0
また、 ANDである限り、画面上の同じ位置を表す任意の 2 組の点を使用できることに注意してください。(origin-end).y != 0
于 2012-09-24T09:36:26.783 に答える