android.view.MotionEvent#ACTION_POINTER_2_DOWN ( )源码实例Demo

下面列出了android.view.MotionEvent#ACTION_POINTER_2_DOWN ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

public boolean onTouchEvent(MotionEvent event) {
//        Log.d(TAG, parsEvent("onTouchEvent: ", event));
        if (event.getAction() == MotionEvent.ACTION_POINTER_2_DOWN) {
            //            Log.d(TAG, "onTouchEvent: scale is true");
            isScaling = true;
        }

        if (event.getAction() == MotionEvent.ACTION_POINTER_UP
            || event.getAction() == MotionEvent.ACTION_POINTER_2_UP) {
            isScaling = false;
        }
        if (translateGestureAble && mGesture != null) {
            mGesture.onTouchEvent(event);
        }

        if (scaleGestureAble && mScaleGesture != null) {
            mScaleGesture.onTouchEvent(event);
        }

        checkScrollBounds(event);

        return true;
    }
 
源代码2 项目: gravitydefied   文件: KeyboardController.java
private static String actionToString(int action) {
	switch (action) {
		case MotionEvent.ACTION_DOWN:
			return "ACTION_DOWN";
		case MotionEvent.ACTION_POINTER_DOWN:
			return "ACTION_POINTER_DOWN";
		case MotionEvent.ACTION_POINTER_2_DOWN:
			return "ACTION_POINTER_2_DOWN";
		case MotionEvent.ACTION_POINTER_2_UP:
			return "ACTION_POINTER_2_UP";
		case MotionEvent.ACTION_POINTER_3_DOWN:
			return "ACTION_POINTER_3_DOWN";
		case MotionEvent.ACTION_POINTER_3_UP:
			return "ACTION_POINTER_3_UP";
		case MotionEvent.ACTION_UP:
			return "ACTION_UP";
		case MotionEvent.ACTION_POINTER_UP:
			return "ACTION_POINTER_UP";
		case MotionEvent.ACTION_MOVE:
			return "ACTION_MOVE";
	}
	return "?";
}
 
源代码3 项目: YiBo   文件: TouchImageView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
	if (Logger.isDebug()) {
        Log.d(TAG, "onTouchEvent……");
        dumpEvent(event);
    }

	int action = event.getAction() & MotionEvent.ACTION_MASK;
    if (event.getPointerCount() == 2
        && (action == MotionEvent.ACTION_POINTER_1_DOWN
            || action == MotionEvent.ACTION_POINTER_2_DOWN )) {
    	mScaleGesture = true;
    } else if (event.getPointerCount() == 1
    		   && action == MotionEvent.ACTION_DOWN) {
    	mScaleGesture = false;
    }

    if (mScaleGesture) {
        mScaleGestureDetector.onTouchEvent(event);
    } else {
    	mGestureDetector.onTouchEvent(event);
    }

    return true;
}
 
源代码4 项目: imsdk-android   文件: PhotoView.java
private boolean onTouchEventInternal(@NonNull MotionEvent event) {
    int touchCount = event.getPointerCount();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_1_DOWN:
        case MotionEvent.ACTION_POINTER_2_DOWN:
            maxTouchCount = Math.max(maxTouchCount, touchCount);
            return true;
        default:
            break;
    }
    return false;
}
 
private String parsEvent(String method, MotionEvent event) {
    String parseStr = null;
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            {
                parseStr = "ACTION_DOWN";
                break;
            }
        case MotionEvent.ACTION_MOVE:
            {
                parseStr = "ACTION_MOVE";

                break;
            }
        case MotionEvent.ACTION_UP:
            {
                parseStr = "ACTION_UP";
                break;
            }
        case MotionEvent.ACTION_CANCEL:
            {
                parseStr = "ACTION_CANCEL";
                break;
            }
        case MotionEvent.ACTION_SCROLL:
            {
                parseStr = "ACTION_SCROLL";
                break;
            }

        case MotionEvent.ACTION_POINTER_UP:
            {
                parseStr = "ACTION_POINTER_UP";
                break;
            }
        case MotionEvent.ACTION_POINTER_2_DOWN:
            {
                parseStr = "ACTION_POINTER_2_DOWN";
                break;
            }
        default:
            {
            }
    }

    return method + event.getAction() + " -- " + parseStr;
}
 
源代码6 项目: AndroidPDF   文件: DragPinchListener.java
@Override
public boolean onTouch(View v, MotionEvent event) {
    mView = v ;
    switch (event.getAction()) {

        // NORMAL CASE : FIRST POINTER DOWN
        case MotionEvent.ACTION_DOWN:
            // Start dragging
            startDrag(event);
            state = State.DRAG;
            lastDownX = event.getX();
            lastDownY = event.getY();
            break;

        // NORMAL CASE : SECOND POINTER DOWN
        case MotionEvent.ACTION_POINTER_2_DOWN:
            startDrag(event);
            startZoom(event);
            state = State.ZOOM;
            break;

        // NORMAL CASE : SECOND POINTER UP
        case MotionEvent.ACTION_POINTER_2_UP:
            // End zooming, goes back to dragging
            state = State.DRAG;
            break;

        // NORMAL CASE : FIRST POINTER UP
        case MotionEvent.ACTION_UP:
            // End everything
            state = State.NONE;
            endDrag();

            // Treat clicks
            if (isClick(event, lastDownX, lastDownY, event.getX(), event.getY())) {
                long time = System.currentTimeMillis();
                handlerClick.removeCallbacks(runnableClick);
                if (onDoubleTapListener != null) {
                    if (time - lastClickTime < MAX_DOUBLE_CLICK_TIME) {
                        onDoubleTapListener.onDoubleTap(event.getX(), event.getY());
                        lastClickTime = 0;
                    } else {
                        lastClickTime = System.currentTimeMillis();
                        handlerClick.postDelayed(runnableClick, MAX_CLICK_TIME);
                    }
                } else {
                    handlerClick.postDelayed(runnableClick,0);
                }
            }
            break;

        // TRICKY CASE : FIRST POINTER UP WHEN SECOND STILL DOWN
        case MotionEvent.ACTION_POINTER_1_UP:

            dragLastX = pointer2LastX;
            dragLastY = pointer2LastY;
            state = State.DRAG;
            break;

        // TRICKY CASE : FIRST POINTER UP THEN DOWN WHILE SECOND POINTER STILL UP
        case MotionEvent.ACTION_POINTER_1_DOWN:
            pointer2LastX = event.getX(POINTER1);
            pointer2LastY = event.getY(POINTER1);

            startDrag(event);
            startZoom(event);
            state = State.ZOOM;
            break;

        // NORMAL CASE : MOVE
        case MotionEvent.ACTION_MOVE:

            switch (state) {
                case ZOOM:
                    pointer2LastX = event.getX(POINTER2);
                    pointer2LastY = event.getY(POINTER2);
                    zoom(event);

                case DRAG:
                    drag(event);
                    break;
                default:
                    break;
            }
            break;
    }

    return true;
}
 
源代码7 项目: umeng_community_android   文件: ScaleImageView.java
@SuppressWarnings("deprecation")
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (mDetector.onTouchEvent(event)) {
        return true;
    }
    int touchCount = event.getPointerCount();
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_1_DOWN:
        case MotionEvent.ACTION_POINTER_2_DOWN:
            if (touchCount >= 2) {
                float distance = distance(event.getX(0), event.getX(1), event.getY(0),
                        event.getY(1));
                mPrevDistance = distance;
                isScaling = true;
            } else {
                mPrevMoveX = (int) event.getX();
                mPrevMoveY = (int) event.getY();
                mLastX = mPrevMoveX;
                mLastY = mPrevMoveY;
            }
        case MotionEvent.ACTION_MOVE:
            if (touchCount >= 2 && isScaling) {
                float dist = distance(event.getX(0), event.getX(1), event.getY(0),
                        event.getY(1));
                // if ( Math.abs(dist - mPrevDistance) < mSlop ) {
                // Log.d("", "######## move dis " + dist + "   " + mSlop);
                // return false;
                // }
                float scale = (dist - mPrevDistance) / dispDistance();
                mPrevDistance = dist;
                scale += 1;
                scale = scale * scale;
                zoomTo(scale, mWidth / 2, mHeight / 2);
                cutting();
            } else if (!isScaling) {
                int distanceX = mPrevMoveX - (int) event.getX();
                int distanceY = mPrevMoveY - (int) event.getY();
                mPrevMoveX = (int) event.getX();
                mPrevMoveY = (int) event.getY();
                mMatrix.postTranslate(-distanceX, -distanceY);
                cutting();
            }
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP:
        case MotionEvent.ACTION_POINTER_2_UP:
            if (event.getPointerCount() <= 1) {
                isScaling = false;
                checkExecuteCallback(event);
            } else {
                if (mDefaultScale == 0f) {
                    mDefaultScale = mScale;
                }
            }
            mPrevDistance = 0;
            mPrevMoveX = 0;
            mPrevMoveY = 0;
            mLastX = 0;
            mLastY = 0;
            break;
    }
    return true;
}
 
源代码8 项目: Carbon   文件: GestureDetector.java
private void handleTwoPointers(MotionEvent event) {
    clicks = 0;
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
        case MotionEvent.ACTION_POINTER_2_DOWN:
        case MotionEvent.ACTION_MOVE:
            if (!transforming) {
                transforming = true;
                handler.removeCallbacks(pressHandler);
                pressHandler = null;
                handler.removeCallbacks(longPressHandler);
                longPressHandler = null;
                handler.removeCallbacks(tapHandler);
                tapHandler = null;

                prevRotation = (float) Math.atan2(event.getY(0) - event.getY(1), event.getX(0) - event.getX(1));
                prevDist = (float) Math.sqrt(Math.pow(event.getX(0) - event.getX(1), 2) +
                        Math.pow(event.getY(0) - event.getY(1), 2));
                prevCenterX = (event.getX(0) + event.getX(1)) / 2;
                prevCenterY = (event.getY(0) + event.getY(1)) / 2;
            } else {
                float dist = (float) Math.sqrt(Math.pow(event.getX(0) - event.getX(1), 2) +
                        Math.pow(event.getY(0) - event.getY(1), 2));
                float cx = (event.getX(0) + event.getX(1)) / 2;
                float cy = (event.getY(0) + event.getY(1)) / 2;
                float dx = cx - prevCenterX;
                float dy = cy - prevCenterY;

                float rotation = (float) Math.atan2(event.getY(0) - event.getY(1), event.getX(0) - event.getX(1));
                float scale = dist / prevDist;
                float rx = rotation - prevRotation;

                fireTransformEvent(event, cx, cy, dx, dy, rx, scale);

                prevCenterX = cx;
                prevCenterY = cy;
                prevRotation = rotation;
                prevDist = dist;
            }
            break;
    }
}
 
源代码9 项目: ImageChoose   文件: ScaleImageView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (mDetector.onTouchEvent(event)) {
        return true;
    }
    int touchCount = event.getPointerCount();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_1_DOWN:
        case MotionEvent.ACTION_POINTER_2_DOWN:
            if (touchCount >= 2) {
                float distance = distance(event.getX(0), event.getX(1), event.getY(0), event.getY(1));
                mPrevDistance = distance;
                isScaling = true;
            } else {
                mPrevMoveX = (int) event.getX();
                mPrevMoveY = (int) event.getY();
            }
        case MotionEvent.ACTION_MOVE:
            if (touchCount >= 2 && isScaling) {
                float dist = distance(event.getX(0), event.getX(1), event.getY(0), event.getY(1));
                float scale = (dist - mPrevDistance) / dispDistance();
                mPrevDistance = dist;
                scale += 1;
                scale = scale * scale;
                zoomTo(scale, mWidth / 2, mHeight / 2);
                cutting();
            } else if (!isScaling) {
                int distanceX = mPrevMoveX - (int) event.getX();
                int distanceY = mPrevMoveY - (int) event.getY();
                mPrevMoveX = (int) event.getX();
                mPrevMoveY = (int) event.getY();
                mMatrix.postTranslate(-distanceX, -distanceY);
                cutting();
            }

            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP:
        case MotionEvent.ACTION_POINTER_2_UP:
            if (event.getPointerCount() <= 1) {
                isScaling = false;
            }
            break;
    }
    return true;
}