Code example for MotionEvent

Methods: getActiongetPointerIdgetX, MotionEvent.getY

0
    @Override 
    public boolean onTouchEvent(MotionEvent ev) {
        mScaleDetector.onTouchEvent(ev);
 
        boolean ret = false;
        float x = ev.getX();
        float y = ev.getY();
 
        final int action = ev.getAction();
 
        switch (action & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN: {
            mRender.onActionDown(x, y);
            mActivePointerId = ev.getPointerId(0);
            ret = true;
            break; 
        } 
        case MotionEvent.ACTION_MOVE: {
            if (!mScaleDetector.isInProgress()) {
                mRender.onActionMove(x, y);
            } 
            mRender.onActionDown(x, y);
            ret = true;
            break; 
        } 
 
        case MotionEvent.ACTION_UP: {
            mActivePointerId = INVALID_POINTER_ID;
            break; 
        } 
 
        case MotionEvent.ACTION_CANCEL: {
            mActivePointerId = INVALID_POINTER_ID;
            break; 
        } 
 
        case MotionEvent.ACTION_POINTER_UP: {
            final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
                    >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
            final int pointerId = ev.getPointerId(pointerIndex);
            if (pointerId == mActivePointerId) {
                // This was our active pointer going up. Choose a new 
                // active pointer and adjust accordingly. 
                final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
                x = ev.getX(newPointerIndex);
                y = ev.getY(newPointerIndex);
                mRender.onActionDown(x, y);
                mActivePointerId = ev.getPointerId(newPointerIndex);
            } 
            break; 
        } 
        }