package com.github.mikephil.charting.data; import com.github.mikephil.charting.charts.ScatterChart; import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet; import com.github.mikephil.charting.renderer.scatter.ChevronDownShapeRenderer; import com.github.mikephil.charting.renderer.scatter.ChevronUpShapeRenderer; import com.github.mikephil.charting.renderer.scatter.CircleShapeRenderer; import com.github.mikephil.charting.renderer.scatter.CrossShapeRenderer; import com.github.mikephil.charting.renderer.scatter.IShapeRenderer; import com.github.mikephil.charting.renderer.scatter.SquareShapeRenderer; import com.github.mikephil.charting.renderer.scatter.TriangleShapeRenderer; import com.github.mikephil.charting.renderer.scatter.XShapeRenderer; import com.github.mikephil.charting.utils.ColorTemplate; import java.util.ArrayList; import java.util.List; public class ScatterDataSet extends LineScatterCandleRadarDataSet<Entry> implements IScatterDataSet { /** * the size the scattershape will have, in density pixels */ private float mShapeSize = 15f; /** * Renderer responsible for rendering this DataSet, default: square */ protected IShapeRenderer mShapeRenderer = new SquareShapeRenderer(); /** * The radius of the hole in the shape (applies to Square, Circle and Triangle) * - default: 0.0 */ private float mScatterShapeHoleRadius = 0f; /** * Color for the hole in the shape. * Setting to `ColorTemplate.COLOR_NONE` will behave as transparent. * - default: ColorTemplate.COLOR_NONE */ private int mScatterShapeHoleColor = ColorTemplate.COLOR_NONE; public ScatterDataSet(List<Entry> yVals, String label) { super(yVals, label); } @Override public DataSet<Entry> copy() { List<Entry> yVals = new ArrayList<Entry>(); for (int i = 0; i < mValues.size(); i++) { yVals.add(mValues.get(i).copy()); } ScatterDataSet copied = new ScatterDataSet(yVals, getLabel()); copied.mDrawValues = mDrawValues; copied.mValueColors = mValueColors; copied.mColors = mColors; copied.mShapeSize = mShapeSize; copied.mShapeRenderer = mShapeRenderer; copied.mScatterShapeHoleRadius = mScatterShapeHoleRadius; copied.mScatterShapeHoleColor = mScatterShapeHoleColor; copied.mHighlightLineWidth = mHighlightLineWidth; copied.mHighLightColor = mHighLightColor; copied.mHighlightDashPathEffect = mHighlightDashPathEffect; return copied; } /** * Sets the size in density pixels the drawn scattershape will have. This * only applies for non custom shapes. * * @param size */ public void setScatterShapeSize(float size) { mShapeSize = size; } @Override public float getScatterShapeSize() { return mShapeSize; } /** * Sets the ScatterShape this DataSet should be drawn with. This will search for an available IShapeRenderer and set this * renderer for the DataSet. * * @param shape */ public void setScatterShape(ScatterChart.ScatterShape shape) { mShapeRenderer = getRendererForShape(shape); } /** * Sets a new IShapeRenderer responsible for drawing this DataSet. * This can also be used to set a custom IShapeRenderer aside from the default ones. * * @param shapeRenderer */ public void setShapeRenderer(IShapeRenderer shapeRenderer) { mShapeRenderer = shapeRenderer; } @Override public IShapeRenderer getShapeRenderer() { return mShapeRenderer; } /** * Sets the radius of the hole in the shape (applies to Square, Circle and Triangle) * Set this to <= 0 to remove holes. * * @param holeRadius */ public void setScatterShapeHoleRadius(float holeRadius) { mScatterShapeHoleRadius = holeRadius; } @Override public float getScatterShapeHoleRadius() { return mScatterShapeHoleRadius; } /** * Sets the color for the hole in the shape. * * @param holeColor */ public void setScatterShapeHoleColor(int holeColor) { mScatterShapeHoleColor = holeColor; } @Override public int getScatterShapeHoleColor() { return mScatterShapeHoleColor; } public static IShapeRenderer getRendererForShape(ScatterChart.ScatterShape shape) { switch (shape) { case SQUARE: return new SquareShapeRenderer(); case CIRCLE: return new CircleShapeRenderer(); case TRIANGLE: return new TriangleShapeRenderer(); case CROSS: return new CrossShapeRenderer(); case X: return new XShapeRenderer(); case CHEVRON_UP: return new ChevronUpShapeRenderer(); case CHEVRON_DOWN: return new ChevronDownShapeRenderer(); } return null; } }