MotionEventはコンストラクターを取得しません。ユニットテストでMotionEventを手動で作成したいのですが、どうすれば取得できますか?ありがとう。
新しいイベントを作成するには、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
イベントが生成されたときに有効だったメタ/修飾キーの状態。受け入れられた答えを示す例は次のとおりです。
// 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);