web-dev-qa-db-ja.com

Android:MotionEventを作成する方法は?

MotionEventはコンストラクターを取得しません。ユニットテストでMotionEventを手動で作成したいのですが、どうすれば取得できますか?ありがとう。

51
fifth

新しいイベントを作成するには、obtainクラスの静的MotionEventメソッドのいずれかを使用する必要があります。

最も簡単な方法(既存のイベントから新しいイベントをラップする以外)は次のとおりです。

_static public MotionEvent obtain(long downTime, long eventTime, int action,
        float x, float y, int metaState) {
_

APIドキュメント

基本的なモーション値のサブセットを入力して、新しいMotionEventを作成します。ここで指定されていないものは、デバイスID(常に0)、圧力とサイズ(常に1)、xおよびy精度(常に1)、およびedgeFlags(常に0)です。

パラメータ

  • downTime位置イベントのストリームを開始するためにユーザーが最初に押した時間(ミリ秒)。これはSystemClock.uptimeMillis()から取得する必要があります。
  • eventTimeこの特定のイベントが生成された時刻(ミリ秒)。これは、SystemClock.uptimeMillis()から取得する必要があります。
  • action実行されているアクションの種類-_ACTION_DOWN_、_ACTION_MOVE_、_ACTION_UP_、または_ACTION_CANCEL_のいずれか。
  • xこのイベントのX座標。
  • yこのイベントのY座標。
  • metaStateイベントが生成されたときに有効だったメタ/修飾キーの状態。

APIドキュメントへのリンク

91
rekaszeru

補足回答

受け入れられた答えを示す例は次のとおりです。

// get the coordinates of the view
int[] coordinates = new int[2];
myView.getLocationOnScreen(coordinates);

// MotionEvent parameters
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
int action = MotionEvent.ACTION_DOWN;
int x = coordinates[0];
int y = coordinates[1];
int metaState = 0;

// dispatch the event
MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, metaState);
myView.dispatchTouchEvent(event);

ノート

9
Suragch