package com.github.mikephil.charting.data;
import android.graphics.Color;
import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
import java.util.ArrayList;
import java.util.List;
public class BarDataSet extends BarLineScatterCandleBubbleDataSet<BarEntry> implements IBarDataSet {
/**
* the maximum number of bars that are stacked upon each other, this value
* is calculated from the Entries that are added to the DataSet
*/
private int mStackSize = 1;
/**
* the color used for drawing the bar shadows
*/
private int mBarShadowColor = Color.rgb(215, 215, 215);
private float mBarBorderWidth = 0.0f;
//圆角矩形的角度
private float mBarBorderRadius = 0.0f;
private int mBarBorderColor = Color.BLACK;
/**
* the alpha value used to draw the highlight indicator bar
*/
private int mHighLightAlpha = 120;
/**
* the overall entry count, including counting each stack-value individually
*/
private int mEntryCountStacks = 0;
/**
* array of labels used to describe the different values of the stacked bars
*/
private String[] mStackLabels = new String[]{
"Stack"
};
public BarDataSet(List<BarEntry> yVals, String label) {
super(yVals, label);
mHighLightColor = Color.rgb(0, 0, 0);
calcStackSize(yVals);
calcEntryCountIncludingStacks(yVals);
}
@Override
public DataSet<BarEntry> copy() {
List<BarEntry> yVals = new ArrayList<BarEntry>();
yVals.clear();
for (int i = 0; i < mValues.size(); i++) {
yVals.add(mValues.get(i).copy());
}
BarDataSet copied = new BarDataSet(yVals, getLabel());
copied.mColors = mColors;
copied.mStackSize = mStackSize;
copied.mBarShadowColor = mBarShadowColor;
copied.mStackLabels = mStackLabels;
copied.mHighLightColor = mHighLightColor;
copied.mHighLightAlpha = mHighLightAlpha;
return copied;
}
/**
* Calculates the total number of entries this DataSet represents, including
* stacks. All values belonging to a stack are calculated separately.
*/
private void calcEntryCountIncludingStacks(List<BarEntry> yVals) {
mEntryCountStacks = 0;
for (int i = 0; i < yVals.size(); i++) {
float[] vals = yVals.get(i).getYVals();
if (vals == null)
mEntryCountStacks++;
else
mEntryCountStacks += vals.length;
}
}
/**
* calculates the maximum stacksize that occurs in the Entries array of this
* DataSet
*/
private void calcStackSize(List<BarEntry> yVals) {
for (int i = 0; i < yVals.size(); i++) {
float[] vals = yVals.get(i).getYVals();
if (vals != null && vals.length > mStackSize)
mStackSize = vals.length;
}
}
@Override
protected void calcMinMax(BarEntry e) {
if (e != null && !Float.isNaN(e.getY())) {
if (e.getYVals() == null) {
if (e.getY() < mYMin)
mYMin = e.getY();
if (e.getY() > mYMax)
mYMax = e.getY();
} else {
if (-e.getNegativeSum() < mYMin)
mYMin = -e.getNegativeSum();
if (e.getPositiveSum() > mYMax)
mYMax = e.getPositiveSum();
}
calcMinMaxX(e);
}
}
@Override
public int getStackSize() {
return mStackSize;
}
@Override
public boolean isStacked() {
return mStackSize > 1 ? true : false;
}
/**
* returns the overall entry count, including counting each stack-value
* individually
*
* @return
*/
public int getEntryCountStacks() {
return mEntryCountStacks;
}
/**
* Sets the color used for drawing the bar-shadows. The bar shadows is a
* surface behind the bar that indicates the maximum value. Don't for get to
* use getResources().getColor(...) to set this. Or Color.rgb(...).
*
* @param color
*/
public void setBarShadowColor(int color) {
mBarShadowColor = color;
}
@Override
public int getBarShadowColor() {
return mBarShadowColor;
}
/**
* Sets the width used for drawing borders around the bars.
* If borderWidth == 0, no border will be drawn.
*
* @return
*/
public void setBarBorderWidth(float width) {
mBarBorderWidth = width;
}
/**
* 圆角矩形的角度
*
* @return
*/
@Override
public float getBarBorderRadius() {
return mBarBorderRadius;
}
public void setBarBorderRadius(float radius){
mBarBorderRadius = radius;
}
/**
* Returns the width used for drawing borders around the bars.
* If borderWidth == 0, no border will be drawn.
*
* @return
*/
@Override
public float getBarBorderWidth() {
return mBarBorderWidth;
}
/**
* Sets the color drawing borders around the bars.
*
* @return
*/
public void setBarBorderColor(int color) {
mBarBorderColor = color;
}
/**
* Returns the color drawing borders around the bars.
*
* @return
*/
@Override
public int getBarBorderColor() {
return mBarBorderColor;
}
/**
* Set the alpha value (transparency) that is used for drawing the highlight
* indicator bar. min = 0 (fully transparent), max = 255 (fully opaque)
*
* @param alpha
*/
public void setHighLightAlpha(int alpha) {
mHighLightAlpha = alpha;
}
@Override
public int getHighLightAlpha() {
return mHighLightAlpha;
}
/**
* Sets labels for different values of bar-stacks, in case there are one.
*
* @param labels
*/
public void setStackLabels(String[] labels) {
mStackLabels = labels;
}
@Override
public String[] getStackLabels() {
return mStackLabels;
}
}