android MotionEvent.obtain模拟事件,自动触发

来源:互联网 发布:新淘宝店铺开了没人买 编辑:程序博客网 时间:2024/05/01 20:45

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();             

        
    



原创粉丝点击