DRYed scatter code, simplified IShapeRenderer implementations
This commit is contained in:
parent
51f0e53a7f
commit
aaec1f5d2c
11 changed files with 188 additions and 316 deletions
|
@ -3,7 +3,6 @@ package com.xxmassdeveloper.mpchartexample.custom;
|
|||
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 @@ public class CustomScatterShapeRenderer implements IShapeRenderer
|
|||
{
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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 @@ public class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
|
|||
|
||||
protected ScatterDataProvider mChart;
|
||||
|
||||
protected ScatterBuffer[] mScatterBuffers;
|
||||
|
||||
public ScatterChartRenderer(ScatterDataProvider chart, ChartAnimator animator, ViewPortHandler viewPortHandler) {
|
||||
super(animator, viewPortHandler);
|
||||
mChart = chart;
|
||||
|
@ -31,15 +29,6 @@ public class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
|
|||
|
||||
@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 @@ public class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
|
|||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.github.mikephil.charting.renderer.scatter;
|
|||
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 @@ public class ChevronDownShapeRenderer implements IShapeRenderer
|
|||
|
||||
|
||||
@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],
|
||||
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);
|
||||
|
||||
c.drawLine(
|
||||
posX,
|
||||
posY + (2 * shapeHalf),
|
||||
posX - (2 * shapeHalf),
|
||||
posY,
|
||||
renderPaint);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.github.mikephil.charting.renderer.scatter;
|
|||
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 @@ public class ChevronUpShapeRenderer implements IShapeRenderer
|
|||
|
||||
|
||||
@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);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.github.mikephil.charting.renderer.scatter;
|
|||
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 @@ public class CircleShapeRenderer implements IShapeRenderer
|
|||
{
|
||||
|
||||
@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 @@ public class CircleShapeRenderer implements IShapeRenderer
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.github.mikephil.charting.renderer.scatter;
|
|||
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 @@ public class CrossShapeRenderer implements IShapeRenderer
|
|||
|
||||
|
||||
@Override
|
||||
public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler, ScatterBuffer buffer, Paint
|
||||
renderPaint, final float shapeSize) {
|
||||
|
||||
final float shapeHalf = shapeSize / 2f;
|
||||
public void renderShape(Canvas c, IScatterDataSet dataSet, ViewPortHandler viewPortHandler,
|
||||
float posX, float posY, Paint renderPaint) {
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,8 +3,6 @@ package com.github.mikephil.charting.renderer.scatter;
|
|||
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 @@ public interface IShapeRenderer
|
|||
* 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);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.github.mikephil.charting.renderer.scatter;
|
|||
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 @@ public class SquareShapeRenderer implements IShapeRenderer
|
|||
|
||||
|
||||
@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 @@ public class SquareShapeRenderer implements IShapeRenderer
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import android.graphics.Canvas;
|
|||
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 @@ public class TriangleShapeRenderer implements IShapeRenderer
|
|||
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 @@ public class TriangleShapeRenderer implements IShapeRenderer
|
|||
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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.github.mikephil.charting.renderer.scatter;
|
|||
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 @@ public class XShapeRenderer implements IShapeRenderer
|
|||
|
||||
|
||||
@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);
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue