public void changeCooridnateSystem(int newWidth, int newHeight, int rotation) {
   float animationScaleX =
       (float) Math.min(newWidth, newHeight) / Math.min(mPreviewWidth, mPreviewHeight);
   float animationScaleY =
       (float) Math.max(newWidth, newHeight) / Math.max(mPreviewWidth, mPreviewHeight);
   // keep original centerX and centerY
   float centerX = centerX();
   float centerY = centerY();
   float tempValue;
   switch (rotation) {
     case 0:
       break;
     case 90:
       tempValue = centerX;
       centerX = centerY;
       centerY = mPreviewWidth - tempValue;
       break;
     case 180:
       if (FeatureSwitcher.isTablet()) {
         centerX = mPreviewWidth - centerX;
         centerY = mPreviewHeight - centerY;
       }
       break;
     case 270:
       tempValue = centerX;
       centerX = mPreviewHeight - centerY;
       centerY = tempValue;
       break;
   }
   // translate to new coordinate system
   translate(centerX - centerX(), centerY - centerY(), false);
   // translate from old renderer coordinate system to new renderer coordinate system
   translate(centerX * animationScaleX - centerX, centerY * animationScaleY - centerY, false);
   // scale by animationScaleX
   scale(animationScaleX, false);
   // scale to translate by animationScaleY / animationScaleX to match correct top distance
   scaleToTranslateY(animationScaleY / animationScaleX);
   // compute rotation
   //        rotate(-rotation);
   float rotationRotate = formatRotationValue(360 - rotation);
   //        rotationRotate = AnimationRect.checkRotationLimit(rotationRotate,
   // mCurrentRotationValue);
   // rotate by current orienation
   rotate(mCurrentRotationValue + rotationRotate);
   //        rotate(rotationRotate);
 }
 public void rotate(float degrees) {
   rotate(degrees, mRectF.centerX(), mRectF.centerY());
 }