package com.mcxiaoke.minicat.ui.imagezoom; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.RectF; public class RotateBitmap { public static final String TAG = "RotateBitmap"; private Bitmap mBitmap; private int mRotation; private int mWidth; private int mHeight; private int mBitmapWidth; private int mBitmapHeight; public RotateBitmap(Bitmap bitmap, int rotation) { mRotation = rotation % 360; setBitmap(bitmap); } public int getRotation() { return mRotation % 360; } public void setRotation(int rotation) { mRotation = rotation; invalidate(); } public Bitmap getBitmap() { return mBitmap; } public void setBitmap(Bitmap bitmap) { mBitmap = bitmap; if (mBitmap != null) { mBitmapWidth = bitmap.getWidth(); mBitmapHeight = bitmap.getHeight(); invalidate(); } } private void invalidate() { Matrix matrix = new Matrix(); int cx = mBitmapWidth / 2; int cy = mBitmapHeight / 2; matrix.preTranslate(-cx, -cy); matrix.postRotate(mRotation); matrix.postTranslate(cx, cx); RectF rect = new RectF(0, 0, mBitmapWidth, mBitmapHeight); matrix.mapRect(rect); mWidth = (int) rect.width(); mHeight = (int) rect.height(); } public Matrix getRotateMatrix() { Matrix matrix = new Matrix(); if (mRotation != 0) { int cx = mBitmapWidth / 2; int cy = mBitmapHeight / 2; matrix.preTranslate(-cx, -cy); matrix.postRotate(mRotation); matrix.postTranslate(mWidth / 2, mHeight / 2); } return matrix; } public int getHeight() { return mHeight; } public int getWidth() { return mWidth; } public void recycle() { if (mBitmap != null) { mBitmap.recycle(); mBitmap = null; } } }