public static GestureDetector newInstance(Context context, OnGestureListener listener) { final int sdkVersion = Build.VERSION.SDK_INT; GestureDetector detector; if (sdkVersion < Build.VERSION_CODES.ECLAIR) { detector = new CupcakeGestureDetector(context); } else if (sdkVersion < Build.VERSION_CODES.FROYO) { detector = new EclairGestureDetector(context); } else { detector = new FroyoGestureDetector(context); } detector.setOnGestureListener(listener); return detector; } }
@Override public boolean onTouchEvent(MotionEvent ev) { mDetector.onTouchEvent(ev); return super.onTouchEvent(ev); } }
@Override public void onDrag(float dx, float dy) { if (mDragScaleDetector.isScaling()) { return; } mSuppMatrix.postTranslate(dx, dy); checkAndDisplayMatrix(); }
mLastTouchX = getActiveX(ev); mLastTouchY = getActiveY(ev); mIsDragging = false; break; final float x = getActiveX(ev); final float y = getActiveY(ev); final float dx = x - mLastTouchX, dy = y - mLastTouchY; mListener.onDrag(dx, dy); mLastTouchX = x; mLastTouchY = y; if (mIsDragging) { if (null != mVelocityTracker) { mLastTouchX = getActiveX(ev); mLastTouchY = getActiveY(ev); mListener.onFling(mLastTouchX, mLastTouchY, -vX, -vY);
@Override public boolean onScale(ScaleGestureDetector detector) { float scaleFactor = detector.getScaleFactor(); if (Float.isNaN(scaleFactor) || Float.isInfinite(scaleFactor)) { return false; } mListener.onScale(scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; }
@Override public boolean onTouchEvent(MotionEvent ev) { final int action = ev.getAction(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: mActivePointerId = ev.getPointerId(0); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: mActivePointerId = INVALID_POINTER_ID; break; case MotionEvent.ACTION_POINTER_UP: // Ignore deprecation, ACTION_POINTER_ID_MASK and // ACTION_POINTER_ID_SHIFT has same value and are deprecated // You can have either deprecation or lint target api warning final int pointerIndex = Compat.getPointerIndex(ev.getAction()); 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; mActivePointerId = ev.getPointerId(newPointerIndex); mLastTouchX = ev.getX(newPointerIndex); mLastTouchY = ev.getY(newPointerIndex); } break; } mActivePointerIndex = ev.findPointerIndex(mActivePointerId != INVALID_POINTER_ID ? mActivePointerId : 0); return super.onTouchEvent(ev); }
@Override public boolean onTouchEvent(MotionEvent ev) { boolean handled = false; if (getDrawable() != null && mCropRect != null) { switch (ev.getAction()) { case ACTION_DOWN: cancelFling(); break; case ACTION_CANCEL: case ACTION_UP: break; } if (null != mDragScaleDetector) { handled = mDragScaleDetector.onTouchEvent(ev); } if (null != mGestureDetector && mGestureDetector.onTouchEvent(ev)) { handled = true; } } return true; }
public CropView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setScaleType(ScaleType.MATRIX); mDragScaleDetector = VersionedGestureDetector.newInstance(context, this); mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener()); mGestureDetector.setOnDoubleTapListener(new DefaultOnDoubleTapListener()); outlinePaint.setAntiAlias(true); outlinePaint.setColor(highlightColor); outlinePaint.setStyle(Paint.Style.STROKE); outlinePaint.setStrokeWidth(dpToPx(OUTLINE_DP)); outsidePaint.setARGB(125, 50, 50, 50); ViewTreeObserver observer = getViewTreeObserver(); if (null != observer) { observer.addOnGlobalLayoutListener(this); } }
public static GestureDetector newInstance(Context context, OnGestureListener listener) { final int sdkVersion = Build.VERSION.SDK_INT; GestureDetector detector; if (sdkVersion < Build.VERSION_CODES.ECLAIR) { detector = new CupcakeGestureDetector(context); } else if (sdkVersion < Build.VERSION_CODES.FROYO) { detector = new EclairGestureDetector(context); } else { detector = new FroyoGestureDetector(context); } detector.setOnGestureListener(listener); return detector; } }
mLastTouchX = getActiveX(ev); mLastTouchY = getActiveY(ev); mIsDragging = false; break; final float x = getActiveX(ev); final float y = getActiveY(ev); final float dx = x - mLastTouchX, dy = y - mLastTouchY; mListener.onDrag(dx, dy); mLastTouchX = x; mLastTouchY = y; if (mIsDragging) { if (null != mVelocityTracker) { mLastTouchX = getActiveX(ev); mLastTouchY = getActiveY(ev); mListener.onFling(mLastTouchX, mLastTouchY, -vX, -vY);
@Override public boolean onTouchEvent(MotionEvent ev) { mDetector.onTouchEvent(ev); return super.onTouchEvent(ev); } }
@Override public void onDrag(float dx, float dy) { if (mDragScaleDetector.isScaling()) { return; } mSuppMatrix.postTranslate(dx, dy); checkAndDisplayMatrix(); }
@Override public boolean onScale(ScaleGestureDetector detector) { float scaleFactor = detector.getScaleFactor(); if (Float.isNaN(scaleFactor) || Float.isInfinite(scaleFactor)) { return false; } mListener.onScale(scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; }
@Override public boolean onTouchEvent(MotionEvent ev) { final int action = ev.getAction(); switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: mActivePointerId = ev.getPointerId(0); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: mActivePointerId = INVALID_POINTER_ID; break; case MotionEvent.ACTION_POINTER_UP: // Ignore deprecation, ACTION_POINTER_ID_MASK and // ACTION_POINTER_ID_SHIFT has same value and are deprecated // You can have either deprecation or lint target api warning final int pointerIndex = Compat.getPointerIndex(ev.getAction()); 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; mActivePointerId = ev.getPointerId(newPointerIndex); mLastTouchX = ev.getX(newPointerIndex); mLastTouchY = ev.getY(newPointerIndex); } break; } mActivePointerIndex = ev.findPointerIndex(mActivePointerId != INVALID_POINTER_ID ? mActivePointerId : 0); return super.onTouchEvent(ev); }
@Override public boolean onTouchEvent(MotionEvent ev) { boolean handled = false; if (getDrawable() != null && mCropRect != null) { switch (ev.getAction()) { case ACTION_DOWN: cancelFling(); break; case ACTION_CANCEL: case ACTION_UP: break; } if (null != mDragScaleDetector) { handled = mDragScaleDetector.onTouchEvent(ev); } if (null != mGestureDetector && mGestureDetector.onTouchEvent(ev)) { handled = true; } } return handled; }
public CropView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setScaleType(ScaleType.MATRIX); mDragScaleDetector = VersionedGestureDetector.newInstance(context, this); mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener()); mGestureDetector.setOnDoubleTapListener(new DefaultOnDoubleTapListener()); outlinePaint.setAntiAlias(true); outlinePaint.setColor(highlightColor); outlinePaint.setStyle(Paint.Style.STROKE); outlinePaint.setStrokeWidth(dpToPx(OUTLINE_DP)); outsidePaint.setARGB(125, 50, 50, 50); ViewTreeObserver observer = getViewTreeObserver(); if (null != observer) { observer.addOnGlobalLayoutListener(this); } }