@@ -131,6 +131,9 @@ protected void drawDataSet(Canvas c, IPieDataSet dataSet) {
131131 float angle = 0 ;
132132 float rotationAngle = mChart .getRotationAngle ();
133133
134+ float phaseX = mAnimator .getPhaseX ();
135+ float phaseY = mAnimator .getPhaseY ();
136+
134137 float [] drawAngles = mChart .getDrawAngles ();
135138
136139 for (int j = 0 ; j < dataSet .getEntryCount (); j ++) {
@@ -148,13 +151,13 @@ protected void drawDataSet(Canvas c, IPieDataSet dataSet) {
148151
149152 mRenderPaint .setColor (dataSet .getColor (j ));
150153 mBitmapCanvas .drawArc (mChart .getCircleBox (),
151- rotationAngle + (angle + sliceSpace / 2f ) * mAnimator . getPhaseY () ,
152- (sliceAngle - sliceSpace / 2f ) * mAnimator . getPhaseY () ,
154+ rotationAngle + (angle + sliceSpace / 2f ) * phaseY ,
155+ (sliceAngle - sliceSpace / 2f ) * phaseY ,
153156 true , mRenderPaint );
154157 }
155158 }
156159
157- angle += sliceAngle * mAnimator . getPhaseX () ;
160+ angle += sliceAngle * phaseX ;
158161 }
159162 }
160163
@@ -169,6 +172,9 @@ public void drawValues(Canvas c) {
169172 float [] drawAngles = mChart .getDrawAngles ();
170173 float [] absoluteAngles = mChart .getAbsoluteAngles ();
171174
175+ float phaseX = mAnimator .getPhaseX ();
176+ float phaseY = mAnimator .getPhaseY ();
177+
172178 float off = r / 10f * 3.6f ;
173179
174180 if (mChart .isDrawHoleEnabled ()) {
@@ -184,7 +190,8 @@ public void drawValues(Canvas c) {
184190
185191 boolean drawXVals = mChart .isDrawSliceTextEnabled ();
186192
187- int cnt = 0 ;
193+ float angle ;
194+ int xIndex = 0 ;
188195
189196 for (int i = 0 ; i < dataSets .size (); i ++) {
190197
@@ -202,14 +209,23 @@ public void drawValues(Canvas c) {
202209 int entryCount = dataSet .getEntryCount ();
203210
204211 for (int j = 0 , maxEntry = Math .min (
205- (int ) Math .ceil (entryCount * mAnimator . getPhaseX () ), entryCount ); j < maxEntry ; j ++) {
212+ (int ) Math .ceil (entryCount * phaseX ), entryCount ); j < maxEntry ; j ++) {
206213
207214 Entry entry = dataSet .getEntryForIndex (j );
208215
216+ if (xIndex == 0 )
217+ angle = 0.f ;
218+ else
219+ angle = absoluteAngles [xIndex - 1 ] * phaseX ;
220+
221+ final float sliceAngle = drawAngles [xIndex ];
222+ final float sliceSpace = dataSet .getSliceSpace ();
223+
209224 // offset needed to center the drawn text in the slice
210- float offset = drawAngles [cnt ] / 2 ;
225+ final float offset = (sliceAngle - sliceSpace / 2.f ) / 2.f ;
226+
227+ angle = angle + offset ;
211228
212- float angle = (absoluteAngles [cnt ] - offset ) * mAnimator .getPhaseY ();
213229 // calculate the text position
214230 float x = (float ) (r
215231 * Math .cos (Math .toRadians (rotationAngle + angle ))
@@ -234,15 +250,15 @@ public void drawValues(Canvas c) {
234250 c .drawText (data .getXVals ().get (j ), x , y + lineHeight ,
235251 mValuePaint );
236252
237- } else if (drawXVals && ! drawYVals ) {
253+ } else if (drawXVals ) {
238254 if (j < data .getXValCount ())
239255 c .drawText (data .getXVals ().get (j ), x , y + lineHeight / 2f , mValuePaint );
240- } else if (! drawXVals && drawYVals ) {
256+ } else if (drawYVals ) {
241257
242258 drawValue (c , formatter , value , entry , 0 , x , y + lineHeight / 2f );
243259 }
244260
245- cnt ++;
261+ xIndex ++;
246262 }
247263 }
248264 }
@@ -390,8 +406,11 @@ protected void drawCenterText(Canvas c) {
390406 @ Override
391407 public void drawHighlighted (Canvas c , Highlight [] indices ) {
392408
409+ float phaseX = mAnimator .getPhaseX ();
410+ float phaseY = mAnimator .getPhaseY ();
411+
412+ float angle ;
393413 float rotationAngle = mChart .getRotationAngle ();
394- float angle = 0f ;
395414
396415 float [] drawAngles = mChart .getDrawAngles ();
397416 float [] absoluteAngles = mChart .getAbsoluteAngles ();
@@ -413,7 +432,7 @@ public void drawHighlighted(Canvas c, Highlight[] indices) {
413432 if (xIndex == 0 )
414433 angle = 0.f ;
415434 else
416- angle = absoluteAngles [xIndex - 1 ] * mAnimator . getPhaseX () ;
435+ angle = absoluteAngles [xIndex - 1 ] * phaseX ;
417436
418437 float sliceAngle = drawAngles [xIndex ];
419438 float sliceSpace = set .getSliceSpace ();
@@ -437,8 +456,8 @@ public void drawHighlighted(Canvas c, Highlight[] indices) {
437456 // redefine the rect that contains the arc so that the
438457 // highlighted pie is not cut off
439458 mBitmapCanvas .drawArc (highlighted ,
440- rotationAngle + (angle + sliceSpace / 2f ) * mAnimator . getPhaseY () ,
441- (sliceAngle - sliceSpace / 2f ) * mAnimator . getPhaseY () ,
459+ rotationAngle + (angle + sliceSpace / 2f ) * phaseY ,
460+ (sliceAngle - sliceSpace / 2f ) * phaseY ,
442461 true , mRenderPaint );
443462 }
444463 }
@@ -458,6 +477,9 @@ protected void drawRoundedSlices(Canvas c) {
458477 if (!dataSet .isVisible ())
459478 return ;
460479
480+ float phaseX = mAnimator .getPhaseX ();
481+ float phaseY = mAnimator .getPhaseY ();
482+
461483 PointF center = mChart .getCenterCircleBox ();
462484 float r = mChart .getRadius ();
463485
@@ -478,16 +500,16 @@ protected void drawRoundedSlices(Canvas c) {
478500
479501 float x = (float ) ((r - circleRadius )
480502 * Math .cos (Math .toRadians ((angle + sliceAngle )
481- * mAnimator . getPhaseY () )) + center .x );
503+ * phaseY )) + center .x );
482504 float y = (float ) ((r - circleRadius )
483505 * Math .sin (Math .toRadians ((angle + sliceAngle )
484- * mAnimator . getPhaseY () )) + center .y );
506+ * phaseY )) + center .y );
485507
486508 mRenderPaint .setColor (dataSet .getColor (j ));
487509 mBitmapCanvas .drawCircle (x , y , circleRadius , mRenderPaint );
488510 }
489511
490- angle += sliceAngle * mAnimator . getPhaseX () ;
512+ angle += sliceAngle * phaseX ;
491513 }
492514 }
493515
0 commit comments