16224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/* 26224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Copyright 2012 AndroidPlot.com 36224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * 46224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 56224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * you may not use this file except in compliance with the License. 66224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * You may obtain a copy of the License at 76224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * 86224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 96224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * 106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * See the License for the specific language governing permissions and 146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * limitations under the License. 156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapackage com.androidplot.xy; 186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.Path; 206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.PointF; 216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/** 236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Renders a point as a line with the vertices marked. Requires 2 or more points to 246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * be rendered. 256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */ 266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapublic class StepRenderer extends LineAndPointRenderer<StepFormatter> { 286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public StepRenderer(XYPlot plot) { 306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala super(plot); 316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala protected void appendToPath(Path path, PointF thisPoint, PointF lastPoint) { 356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //path.lineTo(thisPoint.x, thisPoint.y); 366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala path.lineTo(thisPoint.x, lastPoint.y); 386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala path.lineTo(thisPoint.x, thisPoint.y); 396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //canvas.drawPoint(point.x, lastPoint.y, format.getVertexPaint()); 406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // next the vertical: 416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //canvas.drawLine(point.x, lastPoint.y, point.x, point.y, format.getLinePaint()); 426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala} 446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/* 456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapublic class StepRenderer extends XYSeriesRenderer<StepFormatter> { 466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private PointF lastPoint; 486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private boolean drawLinesEnabled = true; 506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private boolean drawPointsEnabled = true; 516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private XYAxisType stepAxis = XYAxisType.DOMAIN; 536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public StepRenderer(XYPlot plot) { 576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala super(plot); 586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void onRender(Canvas canvas, RectF plotArea) throws PlotRenderException { 626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala for(XYSeries series : getPlot().getSeriesListForRenderer(this.getClass())) { 666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala drawSeries(canvas, plotArea, series, getFormatter(series)); 686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //foreach(this.) 706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //foreach() 716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala @Override 746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void doDrawLegendIcon(Canvas canvas, RectF rect, String text, StepFormatter formatter) { 756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // horizontal icon: 766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala float centerY = rect.centerY(); 776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala float centerX = rect.centerX(); 786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala canvas.drawLine(rect.left, rect.top, rect.right, rect.bottom, formatter.getLinePaint()); 796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala canvas.drawPoint(centerX, centerY, formatter.getVertexPaint()); 806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //canvas.drawRect(rect, formatter.getLinePaint()); 816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void drawSeries(Canvas canvas, RectF plotArea, XYSeries series, StepFormatter formatter) throws PlotRenderException { 866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala beginSeries(canvas, plotArea, formatter); 876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //XYDataset series = bundle.getDataset(); 886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //int seriesIndex = bundle.getSeriesIndex(); 896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala PointF thisPoint; 906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala for (int i = 0; i < series.size(); i++) { 916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Number y = series.getY(i); 926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala Number x = series.getD(i); 936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if (y != null && x != null) { 956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala thisPoint = ValPixConverter.valToPix( 976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala x, 986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala y, 996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala plotArea, 1006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala getPlot().getCalculatedMinX(), 1016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala getPlot().getCalculatedMaxX(), 1026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala getPlot().getCalculatedMinY(), 1036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala getPlot().getCalculatedMaxY()); 1046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //float pixX = ValPixConverter.valToPix(x.doubleValue(), getPlot().getCalculatedMinX().doubleValue(), getPlot().getCalculatedMaxX().doubleValue(), plotArea.width(), false) + (plotArea.left); 1056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //float pixY = ValPixConverter.valToPix(y.doubleValue(), getPlot().getCalculatedMinY().doubleValue(), getPlot().getCalculatedMaxY().doubleValue(), plotArea.height(), true) + plotArea.top; 1066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //thisPoint = new PointF(pixX, pixY); 1086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } else { 1096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala thisPoint = null; 1106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala drawPoint(canvas, thisPoint, plotArea, formatter); 1126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala endSeries(canvas, plotArea, formatter); 1146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void beginSeries(Canvas canvas, RectF plotArea, StepFormatter format) throws PlotRenderException { 1176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala lastPoint = null; 1186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void drawPoint(Canvas canvas, PointF point, RectF plotArea, StepFormatter format) throws PlotRenderException { 1216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if (lastPoint != null) { 1226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if (point != null) { 1236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala switch(stepAxis) { 1256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala case DOMAIN: 1266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // first draw the horizontal line: 1276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala canvas.drawLine(lastPoint.x, lastPoint.y, point.x, lastPoint.y, format.getLinePaint()); 1286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala canvas.drawPoint(point.x, lastPoint.y, format.getVertexPaint()); 1296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala // next the vertical: 1306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala canvas.drawLine(point.x, lastPoint.y, point.x, point.y, format.getLinePaint()); 1316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala break; 1326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala case RANGE: 1336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala break; 1346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala //doDrawLine(canvas, lastPoint, point, plotArea, format); 1366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala drawLastPoint(canvas, plotArea, format); 1406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala lastPoint = point; 1436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala private void endSeries(Canvas canvas, RectF plotArea, StepFormatter format) throws PlotRenderException { 1466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala if(lastPoint != null) { 1476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala drawLastPoint(canvas, plotArea, format); 1486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala protected void drawLastPoint(Canvas canvas, RectF plotArea, StepFormatter format) throws PlotRenderException { 1526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala canvas.drawPoint(lastPoint.x, lastPoint.y, format.getVertexPaint()); 1536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public XYAxisType getStepAxis() { 1576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala return stepAxis; 1586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala 1606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala public void setStepAxis(XYAxisType stepAxis) { 1616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala this.stepAxis = stepAxis; 1626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala } 1636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala} 1646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala*/ 165