web-dev-qa-db-ja.com

アンドロイドでタッチイベントをプログラムでトリガーする方法は?

このようなタッチイベントをトリガーしたい:

まず、指を画面の(0,50%)にタッチダウンし、画面の(50%、50%)にスライドさせて、終了します(指を画面から離します)

私はこのようなものを見つけました:

MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, pressure, size, metaState, xPrecision, yPrecision, deviceId, edgeFlags);

onTouchEvent(event);

しかし、上記のケースをエミュレートする方法は? 2つのイベントを作成する必要がありますか? onTouchDown、onMoveなど...?手伝ってくれてありがとう。

39
user782104
// Obtain MotionEvent object
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
float x = 0.0f;
float y = 0.0f;
// List of meta states found here:     developer.Android.com/reference/Android/view/KeyEvent.html#getMetaState()
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(
    downTime, 
    eventTime, 
    MotionEvent.ACTION_UP, 
    x, 
    y, 
    metaState
);

// Dispatch touch event to view
view.dispatchTouchEvent(motionEvent);
86
bstar55

そして、ここにきれいなバージョンがあります:

public void TouchView(View view)
{
    view.DispatchTouchEvent(MotionEvent.Obtain(SystemClock.UptimeMillis(), SystemClock.UptimeMillis(), (int)MotionEventActions.Down, 0, 0, 0));
    view.DispatchTouchEvent(MotionEvent.Obtain(SystemClock.UptimeMillis(), SystemClock.UptimeMillis(), (int)MotionEventActions.Up, 0, 0, 0));
}

PS:これはxamarin Androidソリューションですが、Java用に簡単に変更できます

1
SubqueryCrunch