package com.jeremyfeinstein.slidingmenu.lib; import android.graphics.Canvas; import android.view.animation.Interpolator; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.CanvasTransformer; public class CanvasTransformerBuilder { private CanvasTransformer mTrans; private static Interpolator lin = new Interpolator() { public float getInterpolation(float t) { return t; } }; private void initTransformer() { if (mTrans == null) mTrans = new CanvasTransformer() { public void transformCanvas(Canvas canvas, float percentOpen) { } }; } public CanvasTransformer zoom(final int openedX, final int closedX, final int openedY, final int closedY, final int px, final int py) { return zoom(openedX, closedX, openedY, closedY, px, py, lin); } public CanvasTransformer zoom(final int openedX, final int closedX, final int openedY, final int closedY, final int px, final int py, final Interpolator interp) { initTransformer(); mTrans = new CanvasTransformer() { public void transformCanvas(Canvas canvas, float percentOpen) { mTrans.transformCanvas(canvas, percentOpen); float f = interp.getInterpolation(percentOpen); canvas.scale((openedX - closedX) * f + closedX, (openedY - closedY) * f + closedY, px, py); } }; return mTrans; } public CanvasTransformer rotate(final int openedDeg, final int closedDeg, final int px, final int py) { return rotate(openedDeg, closedDeg, px, py, lin); } public CanvasTransformer rotate(final int openedDeg, final int closedDeg, final int px, final int py, final Interpolator interp) { initTransformer(); mTrans = new CanvasTransformer() { public void transformCanvas(Canvas canvas, float percentOpen) { mTrans.transformCanvas(canvas, percentOpen); float f = interp.getInterpolation(percentOpen); canvas.rotate((openedDeg - closedDeg) * f + closedDeg, px, py); } }; return mTrans; } public CanvasTransformer translate(final int openedX, final int closedX, final int openedY, final int closedY) { return translate(openedX, closedX, openedY, closedY, lin); } public CanvasTransformer translate(final int openedX, final int closedX, final int openedY, final int closedY, final Interpolator interp) { initTransformer(); mTrans = new CanvasTransformer() { public void transformCanvas(Canvas canvas, float percentOpen) { mTrans.transformCanvas(canvas, percentOpen); float f = interp.getInterpolation(percentOpen); canvas.translate((openedX - closedX) * f + closedX, (openedY - closedY) * f + closedY); } }; return mTrans; } public CanvasTransformer concatTransformer(final CanvasTransformer t) { initTransformer(); mTrans = new CanvasTransformer() { public void transformCanvas(Canvas canvas, float percentOpen) { mTrans.transformCanvas(canvas, percentOpen); t.transformCanvas(canvas, percentOpen); } }; return mTrans; } }