Fixes related to slice space #1857, #1856, #1807, #1699, #1665, #1660, ...

This commit is contained in:
Philipp Jahoda 2016-06-10 14:12:44 +02:00
parent b0f5ec1bf1
commit 95dd249cf3
4 changed files with 36 additions and 9 deletions

View file

@ -163,7 +163,8 @@ public class PieChartActivity extends DemoBase implements OnSeekBarChangeListene
break;
}
case R.id.actionToggleSpin: {
mChart.spin(1000, mChart.getRotationAngle(), mChart.getRotationAngle() + 360, Easing.EasingOption.EaseInCubic);
mChart.spin(1000, mChart.getRotationAngle(), mChart.getRotationAngle() + 360, Easing.EasingOption
.EaseInCubic);
break;
}
}
@ -183,16 +184,16 @@ public class PieChartActivity extends DemoBase implements OnSeekBarChangeListene
float mult = range;
ArrayList<PieEntry> yVals1 = new ArrayList<PieEntry>();
ArrayList<PieEntry> values = new ArrayList<PieEntry>();
// IMPORTANT: In a PieChart, no values (Entry) should have the same
// xIndex (even if from different DataSets), since no values can be
// drawn above each other.
for (int i = 0; i < count + 1; i++) {
yVals1.add(new PieEntry((float) ((Math.random() * mult) + mult / 5), mParties[i % mParties.length]));
values.add(new PieEntry((float) ((Math.random() * mult) + mult / 5), mParties[i % mParties.length]));
}
PieDataSet dataSet = new PieDataSet(yVals1, "Election Results");
PieDataSet dataSet = new PieDataSet(values, "Election Results");
dataSet.setSliceSpace(3f);
dataSet.setSelectionShift(5f);

View file

@ -235,8 +235,7 @@ public class BarChartRenderer extends DataRenderer {
drawValue(c, dataSet.getValueFormatter(), val, entry, i, x,
val >= 0 ? (buffer.buffer[j + 1] + posOffset) : (buffer.buffer[j + 3] + negOffset),
dataSet.getValueTextColor
(j / 4));
dataSet.getValueTextColor(j / 4));
}
// if we have stacks

View file

@ -178,6 +178,22 @@ public class PieChartRenderer extends DataRenderer {
return spacedRadius;
}
/**
* Calculates the sliceSpace to use based on visible values and their size compared to the set sliceSpace.
*
* @param dataSet
* @return
*/
protected float getSliceSpace(IPieDataSet dataSet) {
float spaceSizeRatio = dataSet.getSliceSpace() / mViewPortHandler.getSmallestContentExtension();
float minValueRatio = dataSet.getYMin() / mChart.getData().getYValueSum() * 2;
float sliceSpace = spaceSizeRatio > minValueRatio ? 0f : dataSet.getSliceSpace();
return sliceSpace;
}
protected void drawDataSet(Canvas c, IPieDataSet dataSet) {
float angle = 0;
@ -205,7 +221,7 @@ public class PieChartRenderer extends DataRenderer {
}
}
final float sliceSpace = visibleAngleCount <= 1 ? 0.f : dataSet.getSliceSpace();
final float sliceSpace = visibleAngleCount <= 1 ? 0.f : getSliceSpace(dataSet);
for (int j = 0; j < entryCount; j++) {
@ -411,6 +427,8 @@ public class PieChartRenderer extends DataRenderer {
float offset = Utils.convertDpToPixel(5.f);
final float sliceSpace = getSliceSpace(dataSet);
for (int j = 0; j < entryCount; j++) {
PieEntry entry = dataSet.getEntryForIndex(j);
@ -421,7 +439,6 @@ public class PieChartRenderer extends DataRenderer {
angle = absoluteAngles[xIndex - 1] * phaseX;
final float sliceAngle = drawAngles[xIndex];
final float sliceSpace = dataSet.getSliceSpace();
final float sliceSpaceMiddleAngle = sliceSpace / (Utils.FDEG2RAD * labelRadius);
// offset needed to center the drawn text in the slice

View file

@ -8,7 +8,8 @@ import android.util.Log;
import android.view.View;
/**
* Class that contains information about the charts current viewport settings, including offsets, scale & translation levels, ...
* Class that contains information about the charts current viewport settings, including offsets, scale & translation
* levels, ...
*
* @author Philipp Jahoda
*/
@ -173,6 +174,15 @@ public class ViewPortHandler {
return mChartWidth;
}
/**
* Returns the smallest extension of the content rect (width or height).
*
* @return
*/
public float getSmallestContentExtension() {
return Math.min(mContentRect.width(), mContentRect.height());
}
/**
* ################ ################ ################ ################
*/