2012年3月27日火曜日

タッチした場所に画像を表示する際にずれる

タッチ場所を検出する際
【onSurfaceChanged(GL10 gl, int width, int height){}】
のwidthとheightので計算していました。
下記計算方法
-------------------------------
tochSet(Event event){
x = event.getX();
y = height - event.getY();
}
--------------------------------

しかし、この情報と実際の画面情報が異なり、実際の画面サイズより50位大きかった。
それにより、タッチした場所よりマイナス50された値が帰ってきてました。
以下内容に変更しました。

-------------------------------------
//フィールド
//画面情報保持用の変数
int mGLHeight = 0;
int mGLWidth = 0;

onSurfaceChanged(GL10 gl, int width, int height) {
        //画面取得の自作メソッド
        setWindowSize();

        // ビューポートの設定
   gl.glViewport(0, 0, width, mGLHeight);

                **省略**

// 2Dの投影
    GLU.gluOrtho2D(gl, 0.0f, width, 0.0f, mGLHeight);
}

//画面情報を取得するメソッド
private void setWindowSize() {
  WindowManager windowmanager = (WindowManager)  getSystemService(WINDOW_SERVICE);
  Display disp = windowmanager.getDefaultDisplay();
  mGLWidth = disp.getWidth();
   mGLHeight = disp.getHeight();
}

tochSet(Event event){

x = event.getX();
y = mGLHeight - event.getY();
}
---------------------------------------

setWindowSize();
変数に画面情報を取得する(タッチイベントなどで使うから)
これをメソッド化したのは、他でも使えるかもしれないからですが、変数に入れてるからいらないかもですね。

ビューポートと2Dの投影にmGLHeightをセットする。これにより誤差がなくなりました。(mGLWidthは今のところ不具合でていないのでそのまま)

tochSet();
これはタッチ時に呼ぶ自作メソッドです。タッチイベントに記載してください。

これにより、画面サイズが異なる端末でもちゃんと座標が取得できると思います。
又、画面サイズを取得しているのでこれを元にレイアウトも決めれるのではないでしょうか。
以上が解決作になります。

0 件のコメント:

コメントを投稿