1

sからの座標が正しいかどうか疑問Eventがあります。

Activity私のアプリケーションには、レイアウトにルートFrameLayout要素を持つ単一のインスタンスがあります。私は Galaxy Nexus、Android 4.0.2 で作業していますが、Android 1.6 API 用のアプリケーションを作成しています。

これの生産に今:

onTouch()インスタンスのコールバックをオーバーライドしFrameLayoutて、このロガー (eの略event)を追加しましょう。

Log.i("a",String.valueOf(e.getY()-e.getRawY())
        +" "+String.valueOf(e.getY())
        +" "+String.valueOf(e.getRawY()));
     );

次に、出力が何であるかを確認します。

06-03 16:31:50.560: I/a(15480): 0.0 676.4715 676.4715
06-03 16:31:51.326: I/a(15480): 0.0 675.4723 675.4723
06-03 16:31:51.380: I/a(15480): 0.0 680.4684 684.4653
06-03 16:31:51.388: I/a(15480): -100.0 584.4653 684.4653
06-03 16:31:51.412: I/a(15480): 0.0 686.4637 686.4637
06-03 16:31:51.412: I/a(15480): 0.0 686.4637 686.4637

4 回目のストロークで奇妙な変動が見られますか? 「100.0」が正確に上部の Android OS メニューのグラフィック要素の高さであることは興味深いです (私の場合)。これらの「100.0」は、次の方法でアプリから取得できます。

float padding = act.instance.getWindowManager().getDefaultDisplay().getHeight()
                -fl.getBottom();

、ここでactActivityのインスタンスで、flはのインスタンスFrameLayoutです。

4 番目のストロークから2 番目の値 ( ) を使用してレイアウトに何かを描画するとe.getY()、それは指のすぐ下になることを付け加えておきます。3 番目の値では、指よりかなり低くなります。したがって、システムはほとんどの場合、タッチ y 座標の間違った値を提供し、突然正しい値を教えてくれると結論付けています。

これに対する私の現在の回避策は、e.getRaw()上記で計算されたAndroidの上部画面要素の高さだけを聞いて差し引くことです。

質問は次のとおりです。

  1. 誰もこれに遭遇しましたか?このロガーを実行して、構成に出力される内容を確認してください。
  2. 構成が影響を受けている場合、その原因を知っていますか? よりエレガントな回避策を教えていただけますか?

ご清聴ありがとうございました!

4

0 に答える 0