1

Android アプリの計測テストで使用するマルチタッチ イベント (ズーム、パンなど) をシミュレートする必要があります。1 つの方法は、実際の入力を模倣するMotionEventの対応するシーケンスを手動で生成し、それらを 1 つずつディスパッチすることです。その前に、そのようなシミュレーションを行う素晴らしい API はありますか? 過去に多くの人がこの問題に直面したと思います。Robotium Soloを調べていましたが、単一のポインターのタッチ/ドラッグしか提供していません。

そのような API がない場合、問題に取り組む最善の方法は何でしょうか? 参加している各ポインターのポイント (開始、終了) と期間のペアを受け入れる関数を作成することを考えていましたが、これはジェスチャを線形ポインターの動きに制限します。

public void twoFingerTouchEvent(
             Point from1, Point to1, int duration1, 
             Point from2, Point to2, int duration2) {

  if (from1.equals(to1) && from2.equals(to2)) { 
    // two pointer tap
    // DISPATCH_DOWN
    // DISPATCH_POINTER_DOWN
    // WAIT min(duration1, duration2)
    // DISPATCH_POINTER_UP
    // WAIT abs(duration1 - duration2)
    // DISPATCH_UP
  }
  else if (from1.equals(to1) || from2.equals(to2)) {
    // one of two pointers dragged after tap
    // DISPATCH_DOWN
    // DISPATCH_POINTER_DOWN
    // DISPATCH_MOVE for moving pointer every 3-5 pixels, account for duration
    // DISPATCH_POINTER_UP
    // DISPATCH_UP 
  }
  else {
    // two pointer drag
    // DISPATCH_DOWN
    // DISPATCH_POINTER_DOWN
    // DISPATCH_MOVE for both pointers in alternating order every 3-5 pixels
    // DISPATCH_POINTER_UP
    // DISPATCH_MOVE for pointer with longer duration
    // DISPATCH_UP 
  }
}
4

2 に答える 2

0

MotionEventのドキュメントから取得:

API 9 以下の場合、MotionEvent.ACTION_POINTER_X_DOWN/UP を使用して、どのポインターが上下するかを指定します。

イベント シーケンスは、最初の連絡先の ACTION_DOWN であり、その後に新しい連絡先が追加または削除されると ACTION_POINTER_X_DOWN または ACTION_POINTER_X_UP が続き、最終的に最後の ACTION_UP イベントで最後の連絡先を「持ち上げる」ようになります。

(actionId、pointerCount)
ACTION_DOWN, 1 // 最初の連絡先
ACTION_POINTER_2_DOWN、2
ACTION_MOVE, 2 // ツータッチ ドラッグ/ズーム イベントを生成する
ACTION_POINTER_2_UP、2
ACTION_UP、1

私はこの SO 投稿に基づいていました: Android のテスト用にズーム/ピンチ ジェスチャを生成する方法

于 2013-06-11T14:13:26.713 に答える