123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- package com.github.mikephil.charting.data;
- import android.graphics.Color;
- import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
- import com.github.mikephil.charting.utils.Fill;
- 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 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[]{};
- protected List<Fill> mFills = null;
- 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> entries = new ArrayList<BarEntry>();
- for (int i = 0; i < mEntries.size(); i++) {
- entries.add(mEntries.get(i).copy());
- }
- BarDataSet copied = new BarDataSet(entries, getLabel());
- copy(copied);
- return copied;
- }
- protected void copy(BarDataSet barDataSet) {
- super.copy(barDataSet);
- barDataSet.mStackSize = mStackSize;
- barDataSet.mBarShadowColor = mBarShadowColor;
- barDataSet.mBarBorderWidth = mBarBorderWidth;
- barDataSet.mStackLabels = mStackLabels;
- barDataSet.mHighLightAlpha = mHighLightAlpha;
- }
- @Override
- public List<Fill> getFills() {
- return mFills;
- }
- @Override
- public Fill getFill(int index) {
- return mFills.get(index % mFills.size());
- }
- /**
- * This method is deprecated.
- * Use getFills() instead.
- */
- @Deprecated
- public List<Fill> getGradients() {
- return mFills;
- }
- /**
- * This method is deprecated.
- * Use getFill(...) instead.
- *
- * @param index
- */
- @Deprecated
- public Fill getGradient(int index) {
- return getFill(index);
- }
- /**
- * Sets the start and end color for gradient color, ONLY color that should be used for this DataSet.
- *
- * @param startColor
- * @param endColor
- */
- public void setGradientColor(int startColor, int endColor) {
- mFills.clear();
- mFills.add(new Fill(startColor, endColor));
- }
- /**
- * This method is deprecated.
- * Use setFills(...) instead.
- *
- * @param gradientColors
- */
- @Deprecated
- public void setGradientColors(List<Fill> gradientColors) {
- this.mFills = gradientColors;
- }
- /**
- * Sets the fills for the bars in this dataset.
- *
- * @param fills
- */
- public void setFills(List<Fill> fills) {
- this.mFills = fills;
- }
- /**
- * 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;
- }
- /**
- * 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;
- }
- }
|