| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /**
- * Copyright (C) 2005-2012 XELOG AG
- */
- package ch.spherIC.recurvebowsight.components;
-
- import android.content.Context;
-
- import android.graphics.Color;
-
- import ch.spherIC.recurvebowsight.R;
- import ch.spherIC.recurvebowsight.logic.TrajectoryCalculator;
-
- import org.achartengine.ChartFactory;
- import org.achartengine.GraphicalView;
-
- import org.achartengine.model.XYMultipleSeriesDataset;
- import org.achartengine.model.XYSeries;
-
- import org.achartengine.renderer.XYMultipleSeriesRenderer;
- import org.achartengine.renderer.XYSeriesRenderer;
-
- import java.text.DecimalFormat;
-
-
- /**
- * @author FC Smilari
- */
- public class FlightCurveChart {
-
- private XYMultipleSeriesDataset dataSet;
- private XYMultipleSeriesRenderer mRenderer;
-
- public GraphicalView getView(final Context context) {
-
- XYSeries series = new XYSeries(context.getResources().getString(R.string.fcChart_TitleLable));
-
- this.dataSet = new XYMultipleSeriesDataset(); // collection of series under one object.,there could any
- this.dataSet.addSeries(series); // number of series
-
- //customization of the chart
-
- XYSeriesRenderer renderer = new XYSeriesRenderer(); // one renderer for one series
- renderer.setColor(Color.RED);
- renderer.setDisplayChartValues(false);
- renderer.setLineWidth(2f);
-
- this.mRenderer = new XYMultipleSeriesRenderer();
- this.mRenderer.addSeriesRenderer(renderer);
- this.mRenderer.setMargins(new int[] { 60, 80, 60, 60 }); // top, left, bottom, right
- this.mRenderer.setShowLegend(true);
- this.mRenderer.setAntialiasing(true);
- this.mRenderer.setLabelsColor(Color.BLACK);
-
- // Beschriftungen
- this.mRenderer.setChartTitle(context.getResources().getString(R.string.fcChart_Title));
- this.mRenderer.setChartTitleTextSize(30);
- this.mRenderer.setAxisTitleTextSize(30);
- this.mRenderer.setLegendTextSize(30);
- this.mRenderer.setLabelFormat(new DecimalFormat("0.##"));
- this.mRenderer.setLabelsTextSize(15);
-
- this.mRenderer.setXTitle(context.getResources().getString(R.string.fcChart_TitleXAxis));
- this.mRenderer.setXLabelsColor(Color.DKGRAY);
-
- this.mRenderer.setYTitle(context.getResources().getString(R.string.fcChart_TitleYAxis));
- this.mRenderer.setYLabelsPadding(20);
- this.mRenderer.setYLabelsVerticalPadding(-5);
- this.mRenderer.setYLabelsColor(0, Color.DKGRAY);
-
- // Zoom ausschalten
- this.mRenderer.setZoomEnabled(false, false);
- this.mRenderer.setZoomButtonsVisible(false);
-
- // Grid
- this.mRenderer.setShowGridX(true);
- this.mRenderer.setShowGridY(true);
- this.mRenderer.setGridColor(Color.DKGRAY);
-
- // X/Y-Achsen
- this.mRenderer.setShowAxes(true);
- this.mRenderer.setAxesColor(Color.DKGRAY);
-
- // Hintergrundfarbe
- this.mRenderer.setApplyBackgroundColor(true);
- this.mRenderer.setBackgroundColor(context.getResources().getColor(R.color.qrt_translucent_white));
- this.mRenderer.setMarginsColor(Color.WHITE);
-
- // Verschiebungen ausschalten
- this.mRenderer.setPanEnabled(false, false);
-
- GraphicalView v = ChartFactory.getLineChartView(context, this.dataSet, this.mRenderer);
- return v;
- }
-
- /**
- * @return the dataSet
- */
- public XYMultipleSeriesDataset getDataSet() {
- return this.dataSet;
- }
-
- /**
- * @return the mRenderer
- */
- public XYMultipleSeriesRenderer getMultiRenderer() {
- return this.mRenderer;
- }
-
- public void updateRendererAfterCalculation(final Double shootingDistance, final Double[][] flightCurve) {
-
- Double deltaH;
- Double dy;
- Double rangeY;
- int xLbls = 1;
- int yLbls = 1;
- Double minH = 0.0;
- Double maxH = 0.0;
-
-
- // X-Achse
- if (shootingDistance <= 18d) {
- xLbls = (int) Math.round(shootingDistance);
- } else if (shootingDistance <= 30d) {
- xLbls = (int) Math.round(shootingDistance) / 2;
- } else if (shootingDistance <= 90d) {
- xLbls = (int) Math.round(shootingDistance) / 5;
- } else {
- xLbls = (int) Math.round(shootingDistance) / 10;
- }
- this.mRenderer.setXLabels(xLbls);
-
- // Y-Achse
- for (int i = 0; i < flightCurve.length; i++) {
- if (flightCurve[i][TrajectoryCalculator.IDX_Y] > maxH) {
- maxH = flightCurve[i][TrajectoryCalculator.IDX_Y];
- }
- }
- minH = maxH;
- for (int i = 0; i < flightCurve.length; i++) {
- if (flightCurve[i][TrajectoryCalculator.IDX_Y] < minH) {
- minH = flightCurve[i][TrajectoryCalculator.IDX_Y];
- }
- }
- deltaH = maxH - minH;
-
- if (deltaH <= shootingDistance / 10) {
- dy = (shootingDistance / 10 - deltaH) / 2;
- rangeY = shootingDistance / 10;
- } else if (deltaH <= shootingDistance / 5) {
- dy = (shootingDistance / 5 - deltaH) / 2;
- rangeY = shootingDistance / 5;
- } else {
- dy = (deltaH + shootingDistance * 0.1) / 2;
- rangeY = deltaH + shootingDistance * 0.1;
- }
-
- if (rangeY <= 3d) {
- yLbls = 10;
- } else if (rangeY <= 6d) {
- yLbls = 12;
- } else if (rangeY <= 9d) {
- yLbls = 18;
- } else {
- yLbls = 20;
- }
-
- this.mRenderer.setYAxisMin(minH - dy);
- this.mRenderer.setYAxisMax(maxH + dy);
- this.mRenderer.setYLabels(yLbls);
- }
- }
|