/** Factory method that creates a new instance of TransformGestureDetector */ public static TransformGestureDetector newInstance() { return new TransformGestureDetector(MultiPointerGestureDetector.newInstance()); }
/** Gets the Y component of the translation */ public float getTranslationY() { return calcAverage(mDetector.getCurrentY(), mDetector.getPointerCount()) - calcAverage(mDetector.getStartY(), mDetector.getPointerCount()); }
/** * Calculates the zoom transformation based on the current gesture. * * @param outTransform the matrix to store the result to * @param limitTypes whether to limit translation and/or scale. * @return whether or not the transform has been corrected due to limitation */ protected boolean calculateGestureTransform( Matrix outTransform, @LimitFlag int limitTypes) { TransformGestureDetector detector = mGestureDetector; boolean transformCorrected = false; outTransform.set(mPreviousTransform); if (mIsRotationEnabled) { float angle = detector.getRotation() * (float) (180 / Math.PI); outTransform.postRotate(angle, detector.getPivotX(), detector.getPivotY()); } if (mIsScaleEnabled) { float scale = detector.getScale(); outTransform.postScale(scale, scale, detector.getPivotX(), detector.getPivotY()); } transformCorrected |= limitScale(outTransform, detector.getPivotX(), detector.getPivotY(), limitTypes); if (mIsTranslationEnabled) { outTransform.postTranslate(detector.getTranslationX(), detector.getTranslationY()); } transformCorrected |= limitTranslation(outTransform, limitTypes); return transformCorrected; }
@Test public void testPivot() { when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(0); assertEquals(0, mGestureDetector.getPivotX(), 0); assertEquals(0, mGestureDetector.getPivotY(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(1); assertEquals(100, mGestureDetector.getPivotX(), 0); assertEquals(500, mGestureDetector.getPivotY(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(2); assertEquals(150, mGestureDetector.getPivotX(), 0); assertEquals(550, mGestureDetector.getPivotY(), 0); }
@Before public void setup() { mListener = mock(TransformGestureDetector.Listener.class); mMultiPointerGestureDetector = mock(MultiPointerGestureDetector.class); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(0); when(mMultiPointerGestureDetector.getStartX()).thenReturn(new float[] {100f, 200f}); when(mMultiPointerGestureDetector.getStartY()).thenReturn(new float[] {500f, 600f}); when(mMultiPointerGestureDetector.getCurrentX()).thenReturn(new float[] {10f, 20f}); when(mMultiPointerGestureDetector.getCurrentY()).thenReturn(new float[] {50f, 40f}); mGestureDetector = new TransformGestureDetector(mMultiPointerGestureDetector); mGestureDetector.setListener(mListener); }
@Test public void testTranslation() { when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(0); assertEquals(0, mGestureDetector.getTranslationX(), 0); assertEquals(0, mGestureDetector.getTranslationY(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(1); assertEquals(-90, mGestureDetector.getTranslationX(), 0); assertEquals(-450, mGestureDetector.getTranslationY(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(2); assertEquals(-135, mGestureDetector.getTranslationX(), 0); assertEquals(-505, mGestureDetector.getTranslationY(), 0); }
/** Rests the controller. */ public void reset() { FLog.v(TAG, "reset"); mGestureDetector.reset(); mPreviousTransform.reset(); mActiveTransform.reset(); onTransformChanged(); }
/** Notifies controller of the received touch event. */ @Override public boolean onTouchEvent(MotionEvent event) { FLog.v(TAG, "onTouchEvent: action: ", event.getAction()); if (mIsEnabled) { return mGestureDetector.onTouchEvent(event); } return false; }
@Test public void testRotation() { when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(0); assertEquals(0, mGestureDetector.getRotation(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(1); assertEquals(0, mGestureDetector.getRotation(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(2); assertEquals((float)-Math.PI/2, mGestureDetector.getRotation(), 1e-6); }
@Test public void testScale() { when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(0); assertEquals(1, mGestureDetector.getScale(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(1); assertEquals(1, mGestureDetector.getScale(), 0); when(mMultiPointerGestureDetector.getPointerCount()).thenReturn(2); assertEquals(0.1f, mGestureDetector.getScale(), 1e-6); }
@Test public void testReset() { mGestureDetector.reset(); verify(mMultiPointerGestureDetector).reset(); }
@Test public void testOnTouchEvent() { MotionEvent motionEvent = mock(MotionEvent.class); mGestureDetector.onTouchEvent(motionEvent); verify(mMultiPointerGestureDetector).onTouchEvent(motionEvent); }
/** Gets the X component of the translation */ public float getTranslationX() { return calcAverage(mDetector.getCurrentX(), mDetector.getPointerCount()) - calcAverage(mDetector.getStartX(), mDetector.getPointerCount()); }
/** Factory method that creates a new instance of TransformGestureDetector */ public static TransformGestureDetector newInstance() { return new TransformGestureDetector(MultiPointerGestureDetector.newInstance()); }
/** Gets the X coordinate of the pivot point */ public float getPivotX() { return calcAverage(mDetector.getStartX(), mDetector.getPointerCount()); }
/** Gets the Y coordinate of the pivot point */ public float getPivotY() { return calcAverage(mDetector.getStartY(), mDetector.getPointerCount()); }
/** Gets the X component of the translation */ public float getTranslationX() { return calcAverage(mDetector.getCurrentX(), mDetector.getPointerCount()) - calcAverage(mDetector.getStartX(), mDetector.getPointerCount()); }
/** Gets the Y component of the translation */ public float getTranslationY() { return calcAverage(mDetector.getCurrentY(), mDetector.getPointerCount()) - calcAverage(mDetector.getStartY(), mDetector.getPointerCount()); }
/** Gets the Y coordinate of the pivot point */ public float getPivotY() { return calcAverage(mDetector.getStartY(), mDetector.getPointerCount()); }
/** Gets the X coordinate of the pivot point */ public float getPivotX() { return calcAverage(mDetector.getStartX(), mDetector.getPointerCount()); }