/* * Copyright (C) 2012 www.amsoft.cn * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.ab.view.slidingmenu; import android.graphics.Canvas; import android.view.animation.Interpolator; import com.ab.view.slidingmenu.SlidingMenu.CanvasTransformer; // TODO: Auto-generated Javadoc /** * The Class CanvasTransformerBuilder. */ public class CanvasTransformerBuilder { /** The m trans. */ private CanvasTransformer mTrans; /** The lin. */ private static Interpolator lin = new Interpolator() { public float getInterpolation(float t) { return t; } }; /** * Inits the transformer. */ private void initTransformer() { if (mTrans == null) mTrans = new CanvasTransformer() { public void transformCanvas(Canvas canvas, float percentOpen) { } }; } /** * Zoom. * * @param openedX the opened x * @param closedX the closed x * @param openedY the opened y * @param closedY the closed y * @param px the px * @param py the py * @return the canvas transformer */ 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); } /** * Zoom. * * @param openedX the opened x * @param closedX the closed x * @param openedY the opened y * @param closedY the closed y * @param px the px * @param py the py * @param interp the interp * @return the canvas transformer */ 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; } /** * Rotate. * * @param openedDeg the opened deg * @param closedDeg the closed deg * @param px the px * @param py the py * @return the canvas transformer */ public CanvasTransformer rotate(final int openedDeg, final int closedDeg, final int px, final int py) { return rotate(openedDeg, closedDeg, px, py, lin); } /** * Rotate. * * @param openedDeg the opened deg * @param closedDeg the closed deg * @param px the px * @param py the py * @param interp the interp * @return the canvas transformer */ 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; } /** * Translate. * * @param openedX the opened x * @param closedX the closed x * @param openedY the opened y * @param closedY the closed y * @return the canvas transformer */ public CanvasTransformer translate(final int openedX, final int closedX, final int openedY, final int closedY) { return translate(openedX, closedX, openedY, closedY, lin); } /** * Translate. * * @param openedX the opened x * @param closedX the closed x * @param openedY the opened y * @param closedY the closed y * @param interp the interp * @return the canvas transformer */ 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; } /** * Concat transformer. * * @param t the t * @return the canvas transformer */ 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; } }