package com.github.mikephil.charting.data; import android.graphics.Color; import com.github.mikephil.charting.utils.Utils; import java.util.ArrayList; import java.util.List; public class BubbleDataSet extends BarLineScatterCandleBubbleDataSet<BubbleEntry> { // NOTE: Do not initialize these, as the calcMinMax is called by the super, // and the initializers are called after that and can reset the values protected float mXMax; protected float mXMin; protected float mMaxSize; private float mHighlightCircleWidth = 2.5f; public BubbleDataSet(List<BubbleEntry> yVals, String label) { super(yVals, label); } /** * Sets the width of the circle that surrounds the bubble when highlighted, * in dp. * * @param width */ public void setHighlightCircleWidth(float width) { mHighlightCircleWidth = Utils.convertDpToPixel(width); } public float getHighlightCircleWidth() { return mHighlightCircleWidth; } /** * Sets a color with a specific alpha value. * @param color * @param alpha from 0-255 */ public void setColor(int color, int alpha) { super.setColor(Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color))); } @Override protected void calcMinMax(int start, int end) { if (mYVals.size() == 0) return; final List<BubbleEntry> entries = getYVals(); int endValue; if (end == 0) endValue = mYVals.size() - 1; else endValue = end; mLastStart = start; mLastEnd = endValue; mYMin = yMin(entries.get(start)); mYMax = yMax(entries.get(start)); // need chart width to guess this properly for (int i = start; i <= endValue; i++) { final BubbleEntry entry = entries.get(i); final float ymin = yMin(entry); final float ymax = yMax(entry); if (ymin < mYMin) { mYMin = ymin; } if (ymax > mYMax) { mYMax = ymax; } final float xmin = xMin(entry); final float xmax = xMax(entry); if (xmin < mXMin) { mXMin = xmin; } if (xmax > mXMax) { mXMax = xmax; } final float size = largestSize(entry); if (size > mMaxSize) { mMaxSize = size; } } } @Override public DataSet<BubbleEntry> copy() { List<BubbleEntry> yVals = new ArrayList<BubbleEntry>(); for (int i = 0; i < mYVals.size(); i++) { yVals.add(mYVals.get(i).copy()); } BubbleDataSet copied = new BubbleDataSet(yVals, getLabel()); copied.mColors = mColors; copied.mHighLightColor = mHighLightColor; return copied; } public float getXMax() { return mXMax; } public float getXMin() { return mXMin; } public float getMaxSize() { return mMaxSize; } private float yMin(BubbleEntry entry) { return entry.getVal(); } private float yMax(BubbleEntry entry) { return entry.getVal(); } private float xMin(BubbleEntry entry) { return (float) entry.getXIndex(); } private float xMax(BubbleEntry entry) { return (float) entry.getXIndex(); } private float largestSize(BubbleEntry entry) { return entry.getSize(); } }