2

一連のイベントの と の値をgetX()読み取ると、これらの座標から特定の距離のしきい値を超えるまで、イベントが座標を返すことがわかりました。それ以降は常に正しい座標が返されます。getY()onTouchACTION_MOVEACTION_DOWN

再現する手順:

  1. デフォルトのアクティビティで新しいアプリケーション プロジェクトを作成する
  2. 次のメソッドをデフォルト アクティビティに追加します。

    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        Log.i("getXYDelay", "(x,y)=("+event.getX() + "," + event.getY() + ")");  
        return super.onTouchEvent(event);  
    }  
    
  3. デバイス上で実行し、タッチしてドラッグするときに logcat を監視します

タッチしてドラッグするたびに、getX()/のgetY()結果は、指が中心メートルの半分ほど移動した後にのみ変化し始め、それ以降は正確であることがわかります。

多くの状況でこれがどのように役立つかはわかりますが、作成中のアプリケーションで問題が発生するため、次のようになります。

  • この初期ラグは上書き可能ですか? それともバイパスできますか?
  • デバイス固有ですか?

理想的には、単一の OpenGL サーフェス ビューに対してオフにしたいと考えています。

ノート:

  • Samsung Note SPen を使用している場合は発生しません。
  • 同じことが起こりgetRawX()/getRawY()ます。
  • これはエミュレーターでは発生しないため、ハードウェア タッチ ドライバーが原因であると考えられます。

更新: これはハードウェア ドライバーまたは同様のレベルが原因であり、アプリケーションの制御を超えていると想定しています。これを android 開発者グループにも投稿しようとしましたが、数週間後、モデレーターはまだ私の投稿に座っているようです。

4

2 に答える 2

2

getX()との違いgetRawX()は、

getRawX()デバイス画面を基準とgetRawY()した絶対座標を返すことが保証されています。

whilegetX()getY()は、それらをディスパッチした View を基準とした座標を返す必要があります。

また、あなたが直面している問題は、次の理由によるものです

ウィンドウのコンテンツのレイアウトは、すべての要素が構築されて親ビューに追加された後に発生します。ビューに含まれるコンポーネントや含まれている内容などを理解するまでは、ビューをレイアウトする賢明な方法がないため、このようにする必要があります。

そのため、遅延が発生しています。

于 2014-06-09T11:36:11.787 に答える