@Override public void drawHighlighted(Canvas c, Highlight[] indices) { float rotationAngle = mChart.getRotationAngle(); float angle = 0f; float[] drawAngles = mChart.getDrawAngles(); float[] absoluteAngles = mChart.getAbsoluteAngles(); for (int i = 0; i < indices.length; i++) { // get the index to highlight int xIndex = indices[i].getXIndex(); if (xIndex >= drawAngles.length) continue; PieDataSet set = mChart.getData().getDataSetByIndex(indices[i].getDataSetIndex()); if (set == null || !set.isHighlightEnabled()) continue; if (xIndex == 0) angle = rotationAngle; else angle = rotationAngle + absoluteAngles[xIndex - 1]; angle *= mAnimator.getPhaseY(); float sliceDegrees = drawAngles[xIndex]; float shift = set.getSelectionShift(); RectF circleBox = mChart.getCircleBox(); RectF highlighted = new RectF( circleBox.left - shift, circleBox.top - shift, circleBox.right + shift, circleBox.bottom + shift); mRenderPaint.setColor(set.getColor(xIndex)); // redefine the rect that contains the arc so that the // highlighted pie is not cut off mBitmapCanvas.drawArc( highlighted, angle + set.getSliceSpace() / 2f, sliceDegrees * mAnimator.getPhaseY() - set.getSliceSpace() / 2f, true, mRenderPaint); } }