@Override public void calcMinMax(Viewport viewport) { mViewportYMax = -Float.MAX_VALUE; mViewportYMin = Float.MAX_VALUE; for (ScatterValue e : getVisiblePoints(viewport)) { calcViewportMinMax(e); } float range = mViewportYMax - mViewportYMin; if (Float.compare(getMinValueOffsetPercent(), 0f) > 0f) { mViewportYMin = mViewportYMin - range * getMinValueOffsetPercent(); } if (Float.compare(getMaxValueOffsetPercent(), 0f) > 0f) { mViewportYMax = mViewportYMax + range * getMaxValueOffsetPercent(); } }
mRenderPaint.setColor(dataSet.getColor()); int valueCount = dataSet.getEntryCount(); switch (dataSet.getAxisDependency()) { case AxisY.DEPENDENCY_RIGHT: min = rightMin; final float width = (mContentRect.width() - dataSet.getStartXOffset() - dataSet.getEndXOffset()) / dataSet.getVisibleRange(mViewport) + 1; float shapeWidth = dataSet.getShape().getIntrinsicWidth(); float shapeHeight = dataSet.getShape().getIntrinsicHeight(); if (dataSet.isAutoWidth()) { shapeWidth = width * 0.8f; shapeHeight = shapeWidth * shapeHeight / ((float) dataSet.getShape().getIntrinsicWidth()); for (int i = 0; i < valueCount && i < dataSet.getValues().size() && dataSet.getShape() != null; i++) { ScatterValue point = dataSet.getEntryForIndex(i); float xPosition = dataSet.getStartXOffset() + width * 0.5f + getDrawX((i + dataSet.getStartIndexOffset()) / ((float) valueCount)) - shapeWidth * 0.5f; float yPosition = (max - point.getValue()) / (max - min) * mContentRect.height() - shapeHeight * 0.5f; int x = (int) (xPosition + dataSet.getDrawOffsetX()); int y = (int) (yPosition + dataSet.getDrawOffsetY()); if (point.getColor() != Color.TRANSPARENT) { dataSet.getShape().setColorFilter(point.getColor(), PorterDuff.Mode.SRC_OVER);
public ScatterChart2Model() { final List<ScatterValue> scatterValues = new ArrayList<>(); scatterValues.add(new ScatterValue(1f)); scatterValues.add(new ScatterValue(2f)); scatterValues.add(new ScatterValue(1f)); scatterValues.add(new ScatterValue(2f)); scatterValues.add(new ScatterValue(1f)); scatterValues.add(new ScatterValue(2f)); scatterDataSet = new ScatterDataSet(scatterValues); scatterDataSet.setMinValueOffsetPercent(0.5f); scatterDataSet.setMaxValueOffsetPercent(0.5f); scatterDataSet.setAutoWidth(false); scatterDataSet.addTextValueRenderer(new TextValueRenderer() { @Override public void render(Canvas canvas, Paint textPaint, int index, float x, float y) { textPaint.setTextSize(24f); canvas.drawText(textList.get(index), x, y, textPaint); } }); }
@Override public int getEntryIndexByCoordinate(float x, float y) { int index = -1; if (scatterData.getDataSets().size() > 0) { ScatterDataSet dataSet = scatterData.getDataSets().get(0); RectF rect = new RectF(); float shapeWidth = dataSet.getShape().getIntrinsicWidth(); float shapeHeight = dataSet.getShape().getIntrinsicHeight(); for (int i = 0; i < dataSet.getValues().size(); i++) { final ScatterValue value = dataSet.getEntryForIndex(i); float pX = value.getX(); float pY = value.getY(); rect.set(pX, pY, pX + shapeWidth, pY + shapeHeight); if (rect.contains(x, y)) { index = i; break; } } return index; } return super.getEntryIndexByCoordinate(x, y); }
public ScatterChartModel() { final List<ScatterValue> scatterValues = new ArrayList<>(); scatterValues.add(new ScatterValue(2)); scatterValues.add(new ScatterValue(3)); scatterValues.add(new ScatterValue(4)); scatterValues.add(new ScatterValue(6)); scatterValues.add(new ScatterValue(9)); scatterValues.add(new ScatterValue(2)); scatterValues.add(new ScatterValue(4)); scatterValues.add(new ScatterValue(6)); scatterValues.add(new ScatterValue(9)); scatterValues.add(new ScatterValue(0)); scatterValues.add(new ScatterValue(8)); scatterValues.add(new ScatterValue(9)); scatterValues.add(new ScatterValue(4)); scatterValues.add(new ScatterValue(1)); scatterValues.add(new ScatterValue(2)); scatterDataSet = new ScatterDataSet(scatterValues); scatterDataSet.setAutoWidth(true); }
@Override public boolean addEntry(ScatterValue e) { calcViewportMinMax(e); return scatterValues.add(e); }