1+ package com .slidingmenu .lib ;
2+
3+ import android .graphics .Canvas ;
4+ import android .view .animation .Interpolator ;
5+ import com .slidingmenu .lib .SlidingMenu .CanvasTransformer ;
6+
7+ public class CanvasTransformerBuilder {
8+
9+ private CanvasTransformer mTrans ;
10+
11+ private static Interpolator lin = new Interpolator () {
12+ public float getInterpolation (float t ) {
13+ return t ;
14+ }
15+ };
16+
17+ private void initTransformer () {
18+ if (mTrans == null )
19+ mTrans = new CanvasTransformer () {
20+ public void transformCanvas (Canvas canvas , float percentOpen ) { }
21+ };
22+ }
23+
24+ public CanvasTransformer zoom (final int openedX , final int closedX ,
25+ final int openedY , final int closedY ,
26+ final int px , final int py ) {
27+ return zoom (openedX , closedX , openedY , closedY , px , py , lin );
28+ }
29+
30+ public CanvasTransformer zoom (final int openedX , final int closedX ,
31+ final int openedY , final int closedY ,
32+ final int px , final int py , final Interpolator interp ) {
33+ initTransformer ();
34+ mTrans = new CanvasTransformer () {
35+ public void transformCanvas (Canvas canvas , float percentOpen ) {
36+ mTrans .transformCanvas (canvas , percentOpen );
37+ float f = interp .getInterpolation (percentOpen );
38+ canvas .scale ((openedX - closedX ) * f + closedX ,
39+ (openedY - closedY ) * f + closedY , px , py );
40+ }
41+ };
42+ return mTrans ;
43+ }
44+
45+ public CanvasTransformer rotate (final int openedDeg , final int closedDeg ,
46+ final int px , final int py ) {
47+ return rotate (openedDeg , closedDeg , px , py , lin );
48+ }
49+
50+ public CanvasTransformer rotate (final int openedDeg , final int closedDeg ,
51+ final int px , final int py , final Interpolator interp ) {
52+ initTransformer ();
53+ mTrans = new CanvasTransformer () {
54+ public void transformCanvas (Canvas canvas , float percentOpen ) {
55+ mTrans .transformCanvas (canvas , percentOpen );
56+ float f = interp .getInterpolation (percentOpen );
57+ canvas .rotate ((openedDeg - closedDeg ) * f + closedDeg ,
58+ px , py );
59+ }
60+ };
61+ return mTrans ;
62+ }
63+
64+ public CanvasTransformer translate (final int openedX , final int closedX ,
65+ final int openedY , final int closedY ) {
66+ return translate (openedX , closedX , openedY , closedY , lin );
67+ }
68+
69+ public CanvasTransformer translate (final int openedX , final int closedX ,
70+ final int openedY , final int closedY , final Interpolator interp ) {
71+ initTransformer ();
72+ mTrans = new CanvasTransformer () {
73+ public void transformCanvas (Canvas canvas , float percentOpen ) {
74+ mTrans .transformCanvas (canvas , percentOpen );
75+ float f = interp .getInterpolation (percentOpen );
76+ canvas .translate ((openedX - closedX ) * f + closedX ,
77+ (openedY - closedY ) * f + closedY );
78+ }
79+ };
80+ return mTrans ;
81+ }
82+
83+ public CanvasTransformer concatTransformer (final CanvasTransformer t ) {
84+ initTransformer ();
85+ mTrans = new CanvasTransformer () {
86+ public void transformCanvas (Canvas canvas , float percentOpen ) {
87+ mTrans .transformCanvas (canvas , percentOpen );
88+ t .transformCanvas (canvas , percentOpen );
89+ }
90+ };
91+ return mTrans ;
92+ }
93+
94+ }
0 commit comments