DRYed scatter code, simplified IShapeRenderer implementations
diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/CustomScatterShapeRenderer.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/CustomScatterShapeRenderer.java
index 77ffe27..6279e39 100644
--- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/CustomScatterShapeRenderer.java
+++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/custom/CustomScatterShapeRenderer.java
@@ -3,7 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.renderer.scatter.IShapeRenderer;
import com.github.mikephil.charting.utils.ViewPortHandler;
@@ -16,28 +15,16 @@
{
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
- final float shapeHalf = shapeSize / 2f;
+ final float shapeHalf = dataSet.getScatterShapeSize() / 2f;
- for (int i = 0; i < buffer.size(); i += 2) {
-
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
-
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
-
- renderPaint.setColor(dataSet.getColor(i / 2));
-
- c.drawLine(
- buffer.buffer[i] - shapeHalf,
- buffer.buffer[i + 1] - shapeHalf,
- buffer.buffer[i] + shapeHalf,
- buffer.buffer[i + 1] + shapeHalf,
- renderPaint);
- }
+ c.drawLine(
+ posX - shapeHalf,
+ posY - shapeHalf,
+ posX + shapeHalf,
+ posY + shapeHalf,
+ renderPaint);
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/ScatterBuffer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/ScatterBuffer.java
deleted file mode 100644
index 14b75fb..0000000
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/ScatterBuffer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-
-package com.github.mikephil.charting.buffer;
-
-import com.github.mikephil.charting.data.Entry;
-import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
-
-public class ScatterBuffer extends AbstractBuffer<IScatterDataSet> {
-
- public ScatterBuffer(int size) {
- super(size);
- }
-
- protected void addForm(float x, float y) {
- buffer[index++] = x;
- buffer[index++] = y;
- }
-
- @Override
- public void feed(IScatterDataSet data) {
-
- float size = data.getEntryCount() * phaseX;
-
- for (int i = 0; i < size; i++) {
-
- Entry e = data.getEntryForIndex(i);
- addForm(e.getX(), e.getY() * phaseY);
- }
-
- reset();
- }
-}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/ScatterChartRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/ScatterChartRenderer.java
index e3da3cc..faf2395 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/ScatterChartRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/ScatterChartRenderer.java
@@ -2,9 +2,9 @@
package com.github.mikephil.charting.renderer;
import android.graphics.Canvas;
+import android.util.Log;
import com.github.mikephil.charting.animation.ChartAnimator;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.ScatterData;
import com.github.mikephil.charting.highlight.Highlight;
@@ -22,8 +22,6 @@
protected ScatterDataProvider mChart;
- protected ScatterBuffer[] mScatterBuffers;
-
public ScatterChartRenderer(ScatterDataProvider chart, ChartAnimator animator, ViewPortHandler viewPortHandler) {
super(animator, viewPortHandler);
mChart = chart;
@@ -31,15 +29,6 @@
@Override
public void initBuffers() {
-
- ScatterData scatterData = mChart.getScatterData();
-
- mScatterBuffers = new ScatterBuffer[scatterData.getDataSetCount()];
-
- for (int i = 0; i < mScatterBuffers.length; i++) {
- IScatterDataSet set = scatterData.getDataSetByIndex(i);
- mScatterBuffers[i] = new ScatterBuffer(set.getEntryCount() * 2);
- }
}
@Override
@@ -57,28 +46,47 @@
}
}
+ float[] mPixelBuffer = new float[2];
+
protected void drawDataSet(Canvas c, IScatterDataSet dataSet) {
+ ViewPortHandler viewPortHandler = mViewPortHandler;
+
Transformer trans = mChart.getTransformer(dataSet.getAxisDependency());
- float phaseX = Math.max(0.f, Math.min(1.f, mAnimator.getPhaseX()));
float phaseY = mAnimator.getPhaseY();
- final float shapeSize = Utils.convertDpToPixel(dataSet.getScatterShapeSize());
-
- ScatterBuffer buffer = mScatterBuffers[mChart.getScatterData().getIndexOfDataSet(dataSet)];
- buffer.setPhases(phaseX, phaseY);
- buffer.feed(dataSet);
-
- trans.pointValuesToPixel(buffer.buffer);
-
IShapeRenderer renderer = dataSet.getShapeRenderer();
+ if (renderer == null) {
+ Log.i("MISSING", "There's no IShapeRenderer specified for ScatterDataSet");
+ return;
+ }
- if (renderer != null) {
- renderer.renderShape(c, dataSet, mViewPortHandler, buffer, mRenderPaint, shapeSize);
- } else {
- throw new RuntimeException("No IShapeRenderer found for provided identifier. Please make sure to add a IShapeRenderer" +
- " capable of rendering the provided shape.");
+ int max = (int)(Math.min(
+ Math.ceil((float)dataSet.getEntryCount() * mAnimator.getPhaseX()),
+ (float)dataSet.getEntryCount()));
+
+ for (int i = 0; i < max; i++) {
+
+ Entry e = dataSet.getEntryForIndex(i);
+
+ mPixelBuffer[0] = e.getX();
+ mPixelBuffer[1] = e.getY() * phaseY;
+
+ trans.pointValuesToPixel(mPixelBuffer);
+
+ if (!viewPortHandler.isInBoundsRight(mPixelBuffer[0]))
+ break;
+
+ if (!viewPortHandler.isInBoundsLeft(mPixelBuffer[0])
+ || !viewPortHandler.isInBoundsY(mPixelBuffer[1]))
+ continue;
+
+ mRenderPaint.setColor(dataSet.getColor(i / 2));
+ renderer.renderShape(
+ c, dataSet, mViewPortHandler,
+ mPixelBuffer[0], mPixelBuffer[1],
+ mRenderPaint);
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronDownShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronDownShapeRenderer.java
index cdc3f2a..9328b27 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronDownShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronDownShapeRenderer.java
@@ -3,7 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;
@@ -17,39 +16,26 @@
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
- final float shapeHalf = shapeSize / 2f;
+ final float shapeHalf = dataSet.getScatterShapeSize() / 2f;
renderPaint.setStyle(Paint.Style.STROKE);
renderPaint.setStrokeWidth(Utils.convertDpToPixel(1f));
- for (int i = 0; i < buffer.size(); i += 2) {
+ c.drawLine(
+ posX,
+ posY + (2 * shapeHalf),
+ posX + (2 * shapeHalf),
+ posY,
+ renderPaint);
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
-
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
-
- renderPaint.setColor(dataSet.getColor(i / 2));
-
- c.drawLine(
- buffer.buffer[i],
- buffer.buffer[i + 1] + (2 * shapeHalf),
- buffer.buffer[i] + (2 * shapeHalf),
- buffer.buffer[i + 1],
- renderPaint);
-
- c.drawLine(
- buffer.buffer[i],
- buffer.buffer[i + 1] + (2 * shapeHalf),
- buffer.buffer[i] - (2 * shapeHalf),
- buffer.buffer[i + 1],
- renderPaint);
- }
-
+ c.drawLine(
+ posX,
+ posY + (2 * shapeHalf),
+ posX - (2 * shapeHalf),
+ posY,
+ renderPaint);
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronUpShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronUpShapeRenderer.java
index f4185bf..6dea0ab 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronUpShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/ChevronUpShapeRenderer.java
@@ -3,7 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;
@@ -17,39 +16,27 @@
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
- final float shapeHalf = shapeSize / 2f;
+ final float shapeHalf = dataSet.getScatterShapeSize() / 2f;
renderPaint.setStyle(Paint.Style.STROKE);
renderPaint.setStrokeWidth(Utils.convertDpToPixel(1f));
- for (int i = 0; i < buffer.size(); i += 2) {
+ c.drawLine(
+ posX,
+ posY - (2 * shapeHalf),
+ posX + (2 * shapeHalf),
+ posY,
+ renderPaint);
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
-
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
-
- renderPaint.setColor(dataSet.getColor(i / 2));
-
- c.drawLine(
- buffer.buffer[i],
- buffer.buffer[i + 1] - (2 * shapeHalf),
- buffer.buffer[i] + (2 * shapeHalf),
- buffer.buffer[i + 1],
- renderPaint);
-
- c.drawLine(
- buffer.buffer[i],
- buffer.buffer[i + 1] - (2 * shapeHalf),
- buffer.buffer[i] - (2 * shapeHalf),
- buffer.buffer[i + 1],
- renderPaint);
- }
+ c.drawLine(
+ posX,
+ posY - (2 * shapeHalf),
+ posX - (2 * shapeHalf),
+ posY,
+ renderPaint);
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CircleShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CircleShapeRenderer.java
index 98ed8c1..ac7abb9 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CircleShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CircleShapeRenderer.java
@@ -3,7 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.github.mikephil.charting.utils.Utils;
@@ -17,9 +16,10 @@
{
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
+ final float shapeSize = dataSet.getScatterShapeSize();
final float shapeHalf = shapeSize / 2f;
final float shapeHoleSizeHalf = Utils.convertDpToPixel(dataSet.getScatterShapeHoleRadius());
final float shapeHoleSize = shapeHoleSizeHalf * 2.f;
@@ -28,46 +28,34 @@
final int shapeHoleColor = dataSet.getScatterShapeHoleColor();
- for (int i = 0; i < buffer.size(); i += 2) {
+ if (shapeSize > 0.0) {
+ renderPaint.setStyle(Paint.Style.STROKE);
+ renderPaint.setStrokeWidth(shapeStrokeSize);
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
+ c.drawCircle(
+ posX,
+ posY,
+ shapeHoleSizeHalf + shapeStrokeSizeHalf,
+ renderPaint);
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
-
- renderPaint.setColor(dataSet.getColor(i / 2));
-
- if (shapeSize > 0.0) {
- renderPaint.setStyle(Paint.Style.STROKE);
- renderPaint.setStrokeWidth(shapeStrokeSize);
-
- c.drawCircle(
- buffer.buffer[i],
- buffer.buffer[i + 1],
- shapeHoleSizeHalf + shapeStrokeSizeHalf,
- renderPaint);
-
- if (shapeHoleColor != ColorTemplate.COLOR_NONE) {
- renderPaint.setStyle(Paint.Style.FILL);
-
- renderPaint.setColor(shapeHoleColor);
- c.drawCircle(
- buffer.buffer[i],
- buffer.buffer[i + 1],
- shapeHoleSizeHalf,
- renderPaint);
- }
- } else {
+ if (shapeHoleColor != ColorTemplate.COLOR_NONE) {
renderPaint.setStyle(Paint.Style.FILL);
+ renderPaint.setColor(shapeHoleColor);
c.drawCircle(
- buffer.buffer[i],
- buffer.buffer[i + 1],
- shapeHalf,
+ posX,
+ posY,
+ shapeHoleSizeHalf,
renderPaint);
}
+ } else {
+ renderPaint.setStyle(Paint.Style.FILL);
+
+ c.drawCircle(
+ posX,
+ posY,
+ shapeHalf,
+ renderPaint);
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CrossShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CrossShapeRenderer.java
index 3273490..202670d 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CrossShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/CrossShapeRenderer.java
@@ -3,7 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;
@@ -17,39 +16,26 @@
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
- final float shapeHalf = shapeSize / 2f;
-
+ final float shapeHalf = dataSet.getScatterShapeSize() / 2f;
renderPaint.setStyle(Paint.Style.STROKE);
renderPaint.setStrokeWidth(Utils.convertDpToPixel(1f));
- for (int i = 0; i < buffer.size(); i += 2) {
-
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
-
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
-
- renderPaint.setColor(dataSet.getColor(i / 2));
-
- c.drawLine(
- buffer.buffer[i] - shapeHalf,
- buffer.buffer[i + 1],
- buffer.buffer[i] + shapeHalf,
- buffer.buffer[i + 1],
- renderPaint);
- c.drawLine(
- buffer.buffer[i],
- buffer.buffer[i + 1] - shapeHalf,
- buffer.buffer[i],
- buffer.buffer[i + 1] + shapeHalf,
- renderPaint);
- }
+ c.drawLine(
+ posX - shapeHalf,
+ posY,
+ posX + shapeHalf,
+ posY,
+ renderPaint);
+ c.drawLine(
+ posX,
+ posY - shapeHalf,
+ posX,
+ posY + shapeHalf,
+ renderPaint);
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/IShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/IShapeRenderer.java
index f89d6f6..20b57a9 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/IShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/IShapeRenderer.java
@@ -3,8 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
-import com.github.mikephil.charting.charts.ScatterChart;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.ViewPortHandler;
@@ -19,12 +17,12 @@
* Renders the provided ScatterDataSet with a shape.
*
* @param c Canvas object for drawing the shape
- * @param dataSet the DataSet to be drawn
- * @param viewPortHandler contains information about the current state of the view
- * @param buffer buffer containing the transformed values of all entries in the DataSet
+ * @param dataSet The DataSet to be drawn
+ * @param viewPortHandler Contains information about the current state of the view
+ * @param posX Position to draw the shape at
+ * @param posY Position to draw the shape at
* @param renderPaint Paint object used for styling and drawing
- * @param shapeSize
*/
- void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize);
+ void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint);
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/SquareShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/SquareShapeRenderer.java
index 7467047..ac98679 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/SquareShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/SquareShapeRenderer.java
@@ -3,7 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.github.mikephil.charting.utils.Utils;
@@ -18,9 +17,10 @@
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
+ final float shapeSize = dataSet.getScatterShapeSize();
final float shapeHalf = shapeSize / 2f;
final float shapeHoleSizeHalf = Utils.convertDpToPixel(dataSet.getScatterShapeHoleRadius());
final float shapeHoleSize = shapeHoleSizeHalf * 2.f;
@@ -29,47 +29,35 @@
final int shapeHoleColor = dataSet.getScatterShapeHoleColor();
- for (int i = 0; i < buffer.size(); i += 2) {
+ if (shapeSize > 0.0) {
+ renderPaint.setStyle(Paint.Style.STROKE);
+ renderPaint.setStrokeWidth(shapeStrokeSize);
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
+ c.drawRect(posX - shapeHoleSizeHalf - shapeStrokeSizeHalf,
+ posY - shapeHoleSizeHalf - shapeStrokeSizeHalf,
+ posX + shapeHoleSizeHalf + shapeStrokeSizeHalf,
+ posY + shapeHoleSizeHalf + shapeStrokeSizeHalf,
+ renderPaint);
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
-
- renderPaint.setColor(dataSet.getColor(i / 2));
-
- if (shapeSize > 0.0) {
- renderPaint.setStyle(Paint.Style.STROKE);
- renderPaint.setStrokeWidth(shapeStrokeSize);
-
- c.drawRect(buffer.buffer[i] - shapeHoleSizeHalf - shapeStrokeSizeHalf,
- buffer.buffer[i + 1] - shapeHoleSizeHalf - shapeStrokeSizeHalf,
- buffer.buffer[i] + shapeHoleSizeHalf + shapeStrokeSizeHalf,
- buffer.buffer[i + 1] + shapeHoleSizeHalf + shapeStrokeSizeHalf,
- renderPaint);
-
- if (shapeHoleColor != ColorTemplate.COLOR_NONE) {
- renderPaint.setStyle(Paint.Style.FILL);
-
- renderPaint.setColor(shapeHoleColor);
- c.drawRect(buffer.buffer[i] - shapeHoleSizeHalf,
- buffer.buffer[i + 1] - shapeHoleSizeHalf,
- buffer.buffer[i] + shapeHoleSizeHalf,
- buffer.buffer[i + 1] + shapeHoleSizeHalf,
- renderPaint);
- }
-
- } else {
+ if (shapeHoleColor != ColorTemplate.COLOR_NONE) {
renderPaint.setStyle(Paint.Style.FILL);
- c.drawRect(buffer.buffer[i] - shapeHalf,
- buffer.buffer[i + 1] - shapeHalf,
- buffer.buffer[i] + shapeHalf,
- buffer.buffer[i + 1] + shapeHalf,
+ renderPaint.setColor(shapeHoleColor);
+ c.drawRect(posX - shapeHoleSizeHalf,
+ posY - shapeHoleSizeHalf,
+ posX + shapeHoleSizeHalf,
+ posY + shapeHoleSizeHalf,
renderPaint);
}
+
+ } else {
+ renderPaint.setStyle(Paint.Style.FILL);
+
+ c.drawRect(posX - shapeHalf,
+ posY - shapeHalf,
+ posX + shapeHalf,
+ posY + shapeHalf,
+ renderPaint);
}
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/TriangleShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/TriangleShapeRenderer.java
index f8e2f30..5343454 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/TriangleShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/TriangleShapeRenderer.java
@@ -4,7 +4,6 @@
import android.graphics.Paint;
import android.graphics.Path;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.github.mikephil.charting.utils.Utils;
@@ -20,9 +19,10 @@
protected Path mTrianglePathBuffer = new Path();
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
+ final float shapeSize = dataSet.getScatterShapeSize();
final float shapeHalf = shapeSize / 2f;
final float shapeHoleSizeHalf = Utils.convertDpToPixel(dataSet.getScatterShapeHoleRadius());
final float shapeHoleSize = shapeHoleSizeHalf * 2.f;
@@ -36,55 +36,43 @@
Path tri = mTrianglePathBuffer;
tri.reset();
- for (int i = 0; i < buffer.size(); i += 2) {
+ tri.moveTo(posX, posY - shapeHalf);
+ tri.lineTo(posX + shapeHalf, posY + shapeHalf);
+ tri.lineTo(posX - shapeHalf, posY + shapeHalf);
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
+ if (shapeSize > 0.0) {
+ tri.lineTo(posX, posY - shapeHalf);
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
+ tri.moveTo(posX - shapeHalf + shapeStrokeSize,
+ posY + shapeHalf - shapeStrokeSize);
+ tri.lineTo(posX + shapeHalf - shapeStrokeSize,
+ posY + shapeHalf - shapeStrokeSize);
+ tri.lineTo(posX,
+ posY - shapeHalf + shapeStrokeSize);
+ tri.lineTo(posX - shapeHalf + shapeStrokeSize,
+ posY + shapeHalf - shapeStrokeSize);
+ }
- renderPaint.setColor(dataSet.getColor(i / 2));
+ tri.close();
- tri.moveTo(buffer.buffer[i], buffer.buffer[i + 1] - shapeHalf);
- tri.lineTo(buffer.buffer[i] + shapeHalf, buffer.buffer[i + 1] + shapeHalf);
- tri.lineTo(buffer.buffer[i] - shapeHalf, buffer.buffer[i + 1] + shapeHalf);
+ c.drawPath(tri, renderPaint);
+ tri.reset();
- if (shapeSize > 0.0) {
- tri.lineTo(buffer.buffer[i], buffer.buffer[i + 1] - shapeHalf);
+ if (shapeSize > 0.0 &&
+ shapeHoleColor != ColorTemplate.COLOR_NONE) {
- tri.moveTo(buffer.buffer[i] - shapeHalf + shapeStrokeSize,
- buffer.buffer[i + 1] + shapeHalf - shapeStrokeSize);
- tri.lineTo(buffer.buffer[i] + shapeHalf - shapeStrokeSize,
- buffer.buffer[i + 1] + shapeHalf - shapeStrokeSize);
- tri.lineTo(buffer.buffer[i],
- buffer.buffer[i + 1] - shapeHalf + shapeStrokeSize);
- tri.lineTo(buffer.buffer[i] - shapeHalf + shapeStrokeSize,
- buffer.buffer[i + 1] + shapeHalf - shapeStrokeSize);
- }
+ renderPaint.setColor(shapeHoleColor);
+ tri.moveTo(posX,
+ posY - shapeHalf + shapeStrokeSize);
+ tri.lineTo(posX + shapeHalf - shapeStrokeSize,
+ posY + shapeHalf - shapeStrokeSize);
+ tri.lineTo(posX - shapeHalf + shapeStrokeSize,
+ posY + shapeHalf - shapeStrokeSize);
tri.close();
c.drawPath(tri, renderPaint);
tri.reset();
-
- if (shapeSize > 0.0 &&
- shapeHoleColor != ColorTemplate.COLOR_NONE) {
-
- renderPaint.setColor(shapeHoleColor);
-
- tri.moveTo(buffer.buffer[i],
- buffer.buffer[i + 1] - shapeHalf + shapeStrokeSize);
- tri.lineTo(buffer.buffer[i] + shapeHalf - shapeStrokeSize,
- buffer.buffer[i + 1] + shapeHalf - shapeStrokeSize);
- tri.lineTo(buffer.buffer[i] - shapeHalf + shapeStrokeSize,
- buffer.buffer[i + 1] + shapeHalf - shapeStrokeSize);
- tri.close();
-
- c.drawPath(tri, renderPaint);
- tri.reset();
- }
}
}
diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/XShapeRenderer.java b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/XShapeRenderer.java
index 3c37174..225640e 100644
--- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/XShapeRenderer.java
+++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/scatter/XShapeRenderer.java
@@ -3,7 +3,6 @@
import android.graphics.Canvas;
import android.graphics.Paint;
-import com.github.mikephil.charting.buffer.ScatterBuffer;
import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet;
import com.github.mikephil.charting.utils.Utils;
import com.github.mikephil.charting.utils.ViewPortHandler;
@@ -17,38 +16,26 @@
@Override
- public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
- renderPaint, final float shapeSize) {
+ public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
+ float posX, float posY, Paint renderPaint) {
- final float shapeHalf = shapeSize / 2f;
+ final float shapeHalf = dataSet.getScatterShapeSize() / 2f;
renderPaint.setStyle(Paint.Style.STROKE);
renderPaint.setStrokeWidth(Utils.convertDpToPixel(1f));
- for (int i = 0; i < buffer.size(); i += 2) {
-
- if (!viewPortHandler.isInBoundsRight(buffer.buffer[i]))
- break;
-
- if (!viewPortHandler.isInBoundsLeft(buffer.buffer[i])
- || !viewPortHandler.isInBoundsY(buffer.buffer[i + 1]))
- continue;
-
- renderPaint.setColor(dataSet.getColor(i / 2));
-
- c.drawLine(
- buffer.buffer[i] - shapeHalf,
- buffer.buffer[i + 1] - shapeHalf,
- buffer.buffer[i] + shapeHalf,
- buffer.buffer[i + 1] + shapeHalf,
- renderPaint);
- c.drawLine(
- buffer.buffer[i] + shapeHalf,
- buffer.buffer[i + 1] - shapeHalf,
- buffer.buffer[i] - shapeHalf,
- buffer.buffer[i + 1] + shapeHalf,
- renderPaint);
- }
+ c.drawLine(
+ posX - shapeHalf,
+ posY - shapeHalf,
+ posX + shapeHalf,
+ posY + shapeHalf,
+ renderPaint);
+ c.drawLine(
+ posX + shapeHalf,
+ posY - shapeHalf,
+ posX - shapeHalf,
+ posY + shapeHalf,
+ renderPaint);
}