@@ -100,9 +100,10 @@ protected void drawItem(Canvas canvas, int index, int offset) {
100100 // 滚动的距离映射到y轴的长度
101101 float translateY = (float ) (Math .sin (angle ) * r );
102102
103- float scaleX = (float ) Math .cos (angle / 3 );
103+ float scaleOffset = (float ) Math .abs (Math .sin (angle / 2 ) * (itemHeight - getLineSpace ()));
104+
104105 // 折射偏移量x
105- float refractX = getRefractX ();
106+ // float refractX = getRefractX();
106107
107108 int clipLeft = getPaddingLeft ();
108109 int clipRight = getWidth () - getPaddingRight ();
@@ -113,7 +114,7 @@ protected void drawItem(Canvas canvas, int index, int offset) {
113114 if (Math .abs (range ) <= 0 ) {
114115 mPaint .setColor (getSelectedColor ());
115116 canvas .save ();
116- canvas .translate (refractX , 0 );
117+ // canvas.translate(refractX, 0);
117118 canvas .clipRect (clipLeft , upperLimit , clipRight , lowerLimit );
118119 drawText (canvas , text , translateX , translateY , rotate , 1 );
119120 canvas .restore ();
@@ -122,41 +123,41 @@ protected void drawItem(Canvas canvas, int index, int offset) {
122123 else if (range > 0 && range < itemHeight ) {
123124 mPaint .setColor (getSelectedColor ());
124125 canvas .save ();
125- canvas .translate (refractX , 0 );
126+ // canvas.translate(refractX, 0);
126127 canvas .clipRect (clipLeft , upperLimit , clipRight , lowerLimit );
127128 drawText (canvas , text , translateX , translateY , rotate , 1 );
128129 canvas .restore ();
129130
130131 mPaint .setColor (getUnselectedColor ());
131132 canvas .save ();
132133 canvas .clipRect (clipLeft , lowerLimit , clipRight , clipBottom );
133- drawText (canvas , text , translateX , translateY , rotate , scaleX );
134+ drawText (canvas , text , translateX , translateY , rotate , scaleOffset );
134135 canvas .restore ();
135136 }
136137 // 绘制与上分界线相交的文字
137138 else if (range < 0 && range > -itemHeight ) {
138139 mPaint .setColor (getSelectedColor ());
139140 canvas .save ();
140- canvas .translate (refractX , 0 );
141+ // canvas.translate(refractX, 0);
141142 canvas .clipRect (clipLeft , upperLimit , clipRight , lowerLimit );
142143 drawText (canvas , text , translateX , translateY , rotate , 1 );
143144 canvas .restore ();
144145
145146 mPaint .setColor (getUnselectedColor ());
146147 canvas .save ();
147148 canvas .clipRect (clipLeft , clipTop , clipRight , upperLimit );
148- drawText (canvas , text , translateX , translateY , rotate , scaleX );
149+ drawText (canvas , text , translateX , translateY , rotate , scaleOffset );
149150 canvas .restore ();
150151 } else {
151152 mPaint .setColor (getUnselectedColor ());
152153 canvas .save ();
153154 canvas .clipRect (clipLeft , clipTop , clipRight , clipBottom );
154- drawText (canvas , text , translateX , translateY , rotate , scaleX );
155+ drawText (canvas , text , translateX , translateY , rotate , scaleOffset );
155156 canvas .restore ();
156157 }
157158 }
158159
159- private void drawText (Canvas canvas , CharSequence text , float translateX , float translateY , float rotate , float scale ) {
160+ private void drawText (Canvas canvas , CharSequence text , float translateX , float translateY , float rotate , float scaleOffset ) {
160161 mCamera .save ();
161162 mCamera .rotateX (rotate );
162163 mCamera .getMatrix (mMatrix );
@@ -166,7 +167,12 @@ private void drawText(Canvas canvas, CharSequence text, float translateX, float
166167 mMatrix .preTranslate (-centerX , -centerY );
167168 mMatrix .postTranslate (centerX + translateX , centerY + translateY );
168169
169- canvas .scale (scale , 1 , centerX , centerY );
170+ final int width = canvas .getWidth ();
171+ final int height = canvas .getHeight ();
172+ float scaleX = (width - scaleOffset ) / width ;
173+ float scaleY = (height - scaleOffset ) / height ;
174+ canvas .scale (scaleX , scaleY , centerX , centerY );
175+
170176 canvas .concat (mMatrix );
171177 canvas .drawText (text , 0 , text .length (), centerX , centerY - baseline , mPaint );
172178 }
0 commit comments