view.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event) { Toast toast = Toast.makeText( getApplicationContext(), "View touched", Toast.LENGTH_LONG ); toast.show(); return true; }});// Obtain MotionEvent objectlong 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 viewview.dispatchTouchEvent(motionEvent);
private void twoPointTouch(float xOneStart, float yOneStart, float xOneEnd, float yOneEnd, float xTwoStart, float yTwoStart, float xTwoEnd, float yTwoEnd, int stepCount) { long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); MotionEvent.PointerCoords pointerCoordsOneStart = new MotionEvent.PointerCoords(); pointerCoordsOneStart.x = xOneStart; pointerCoordsOneStart.y = yOneStart; MotionEvent.PointerCoords pointerCoordsTwoStart = new MotionEvent.PointerCoords(); pointerCoordsTwoStart.x = xTwoStart; pointerCoordsTwoStart.y = yTwoStart; MotionEvent.PointerCoords pointerCoordsOneEnd = new MotionEvent.PointerCoords(); pointerCoordsOneEnd.x = xOneEnd; pointerCoordsOneEnd.y = yOneEnd; MotionEvent.PointerCoords pointerCoordsTwoEnd = new MotionEvent.PointerCoords(); pointerCoordsTwoEnd.x = xTwoEnd; pointerCoordsTwoEnd.y = yTwoEnd; float xOneStep = (xOneEnd - xOneStart) / stepCount; float yOneStep = (yOneEnd - yOneStart) / stepCount; float xTwoStep = (xTwoEnd - xTwoStart) / stepCount; float yTwoStep = (yTwoEnd - xTwoStart) / stepCount; MotionEvent.PointerCoords pointerCoordsOneStep = new MotionEvent.PointerCoords(); pointerCoordsOneStep.x = xOneStart; pointerCoordsOneStep.y = yOneStart; MotionEvent.PointerCoords pointerCoordsTwoStep = new MotionEvent.PointerCoords(); pointerCoordsTwoStep.x = xTwoStart; pointerCoordsTwoStep.y = yTwoStart; MotionEvent event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 2, new int[] {0, 1}, new MotionEvent.PointerCoords[] {pointerCoordsOneStart, pointerCoordsTwoStart}, 0, 0.0f, 0.0f, 0, 0, 0, 0); Log.e(LOG_TAG, "this event has " + event.getPointerCount() + "action is " + event.getAction()); inst.sendPointerSync(event); inst.waitForIdleSync(); for (int i = 0; i < stepCount; ++i) { pointerCoordsOneStep.x += xOneStep; pointerCoordsOneStep.y += yOneStep; pointerCoordsTwoStep.x += xTwoStep; pointerCoordsTwoStep.y += yTwoStep; eventTime = SystemClock.uptimeMillis(); event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_MOVE, 2, new int[] {0, 1}, new MotionEvent.PointerCoords[] {pointerCoordsOneStep, pointerCoordsTwoStep}, 0, 0.0f, 0.0f, 0, 0, 0, 0); Log.e(LOG_TAG, "pointerCoordsOneStep x is " + pointerCoordsOneStep.x); Log.e(LOG_TAG, "pointerCoordsOneStep y is " + pointerCoordsOneStep.y); Log.i(LOG_TAG, "pointerCoordsTwoStep x is " + pointerCoordsTwoStep.x); Log.i(LOG_TAG, "pointerCoordsTwoStep y is " + pointerCoordsTwoStep.y); inst.sendPointerSync(event); inst.waitForIdleSync(); } eventTime = SystemClock.uptimeMillis(); event = MotionEvent.obtain(downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 2, new int[] {0, 1}, new MotionEvent.PointerCoords[] {pointerCoordsOneEnd, pointerCoordsTwoEnd}, 0, 0.0f, 0.0f, 0, 0, 0, 0); inst.sendPointerSync(event); inst.waitForIdleSync();