package net.avenwu.support.widget; import android.content.Context; import android.graphics.Camera; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PaintFlagsDrawFilter; import android.util.AttributeSet; import android.view.animation.Transformation; import android.widget.FrameLayout; /** * Created by aven on 1/20/16. */ public class MatrixFrameLayout extends FrameLayout { Camera mCamera = new Camera(); Transformation mTransformation = new Transformation(); private PaintFlagsDrawFilter mPaintFlagsDrawFilter = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); public MatrixFrameLayout(Context context) { this(context, null); } public MatrixFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); setWillNotDraw(false); } @Override public void draw(Canvas canvas) { mTransformation.clear(); mTransformation.setTransformationType(Transformation.TYPE_MATRIX); Matrix matrix = mTransformation.getMatrix(); float degree = 15; mCamera.save(); mCamera.rotateY(degree); mCamera.getMatrix(matrix); mCamera.restore(); final float centerY = getHeight() / 2f; matrix.preTranslate(0, -centerY); matrix.postTranslate(0, centerY); canvas.save(); canvas.concat(mTransformation.getMatrix()); canvas.setDrawFilter(mPaintFlagsDrawFilter); super.draw(canvas); canvas.restore(); } }