private void initLine(XYSeries series) { Random r = new Random(); xTemp = 0; yTemp = r.nextInt(100); count = series.getItemCount(); if (count > 10) { count = 10; } for (int i = 0; i < count; i++) { x[i] = series.getX(i); y[i] = series.getY(i); } series.clear(); series.add(xTemp, yTemp); for (int i = 0; i < count; i++) { series.add(x[i] + 1, y[i]); } }
// ======================================================================== void drawAllDataSets( Canvas canvas, Rect frame, Paint hash_mark_label_paint, double xPixelsPerUnit, double yPixelsPerUnit, double ySecondaryPixelsPerUnit) { // double xPixelsPerUnit, double ySecondaryPixelsPerUnit) { MinMax x_span = mRenderer.getXAxisSpan(); for (int i = 0; i < mDataset.getSeriesCount(); i++) { XYSeries series = mDataset.getSeriesAt(i); if (series.getItemCount() == 0) { continue; } SimpleSeriesRenderer seriesRenderer = mRenderer.getSeriesRendererAt(i); MinMax vertical_series_span; double vertical_pixels_per_unit; if (mRenderer.hasSecondaryYAxis() && seriesRenderer.getUsesSecondaryAxis()) { vertical_series_span = mRenderer.getYSecondaryAxisSpan(); vertical_pixels_per_unit = ySecondaryPixelsPerUnit; } else { vertical_series_span = mRenderer.getYPrimaryAxisSpan(); vertical_pixels_per_unit = yPixelsPerUnit; } List<PointF> points = new ArrayList<PointF>(); for (int j = 0; j < series.getItemCount(); j++) { PointF point = new PointF( (float) (frame.left + xPixelsPerUnit * (series.getX(j).doubleValue() - x_span.min.doubleValue())), (float) (frame.bottom - vertical_pixels_per_unit * (series.getY(j).doubleValue() - vertical_series_span.min.doubleValue()))); points.add(point); } drawSeries( canvas, hash_mark_label_paint, points, seriesRenderer, (float) xPixelsPerUnit, (float) vertical_pixels_per_unit, Math.min( frame.bottom, (float) (frame.bottom + vertical_pixels_per_unit * vertical_series_span.min.doubleValue())), i); // Render glyphs atop the chart if necessary if (isRenderPoints(seriesRenderer)) { ScatterChart pointsChart = new ScatterChart(mDataset, mRenderer); pointsChart.drawSeries( canvas, hash_mark_label_paint, points, seriesRenderer, (float) xPixelsPerUnit, (float) vertical_pixels_per_unit, 0, i); } hash_mark_label_paint.setTextSize(DEFAULT_HASH_MARK_TEXT_SIZE); if (Orientation.HORIZONTAL.equals(mRenderer.getOrientation())) { hash_mark_label_paint.setTextAlign(Align.CENTER); } else { hash_mark_label_paint.setTextAlign(Align.LEFT); } if (mRenderer.isDisplayChartValues()) { drawChartValuesText(canvas, series, hash_mark_label_paint, points, i); } } }
protected List<Double> getXLabels(double min, double max, int count) { final List<Double> result = new ArrayList<Double>(); if (!mRenderer.isXRoundedLabels()) { if (mDataset.getSeriesCount() > 0) { XYSeries series = mDataset.getSeriesAt(0); int length = series.getItemCount(); int intervalLength = 0; int startIndex = -1; for (int i = 0; i < length; i++) { double value = series.getX(i); if (min <= value && value <= max) { intervalLength++; if (startIndex < 0) { startIndex = i; } } } if (intervalLength < count) { for (int i = startIndex; i < startIndex + intervalLength; i++) { result.add(series.getX(i)); } } else { float step = (float) intervalLength / count; int intervalCount = 0; for (int i = 0; i < length && intervalCount < count; i++) { double value = series.getX(Math.round(i * step)); if (min <= value && value <= max) { result.add(value); intervalCount++; } } } return result; } else { return super.getXLabels(min, max, count); } } if (mStartPoint == null) { mStartPoint = min - (min % DAY) + DAY + new Date(Math.round(min)).getTimezoneOffset() * 60 * 1000; } if (count > 25) { count = 25; } final double cycleMath = (max - min) / count; if (cycleMath <= 0) { return result; } double cycle = DAY; if (cycleMath <= DAY) { while (cycleMath < cycle / 2) { cycle = cycle / 2; } } else { while (cycleMath > cycle) { cycle = cycle * 2; } } double val = mStartPoint - Math.floor((mStartPoint - min) / cycle) * cycle; int i = 0; while (val < max && i++ <= count) { result.add(val); val += cycle; } return result; }
/** * Sets the x axis range so all the values fit the way I expect * * @param index */ public void fitData(int index) { XYSeries series = mChart.getDataset().getSeriesAt(index); double barLength = (series.getMaxX() - series.getMinX()) / series.getItemCount(); mChart.getRenderer().setXAxisMax(series.getMaxX() + barLength / 2); mChart.getRenderer().setXAxisMin(series.getMinX() - barLength / 2); }