public boolean onRotate(RotateGestureDetector detector) { float rotation = detector.getRotationRadiansDelta(); /* * If Shove is in progress do not handle rotation * If previous rotation is handled then keep on handling it * else give some buffer for shove to be processed */ if (mRotationHandled || (!mShoveHandled && (Math.abs(rotation) > ROTATION_THRESHOLD))) { float rotAngle; // Compensate for the ROTATION_THRESHOLD at the very beginning of the gesture, to avoid // rotation jumps if (!mRotationHandled) { rotAngle = (rotation > 0) ? (rotation - ROTATION_THRESHOLD) : (rotation + ROTATION_THRESHOLD); } else { rotAngle = rotation; } float x = rotateGestureDetector.getFocusX(); float y = rotateGestureDetector.getFocusY(); mLastDoubleGestureTime = detector.getEventTime(); handleRotateGesture(x, y, -(rotAngle)); mRotationHandled = true; return true; } mRotationHandled = false; return false; }