Version für alte Androidversionen der Visiereinstellung für Recurvebogen.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

FlightCurveChart.java 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * Copyright (C) 2005-2012 XELOG AG
  3. */
  4. package ch.spherIC.recurvebowsight.components;
  5. import android.content.Context;
  6. import android.graphics.Color;
  7. import ch.spherIC.recurvebowsight.R;
  8. import ch.spherIC.recurvebowsight.logic.TrajectoryCalculator;
  9. import org.achartengine.ChartFactory;
  10. import org.achartengine.GraphicalView;
  11. import org.achartengine.model.XYMultipleSeriesDataset;
  12. import org.achartengine.model.XYSeries;
  13. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  14. import org.achartengine.renderer.XYSeriesRenderer;
  15. import java.text.DecimalFormat;
  16. /**
  17. * @author FC Smilari
  18. */
  19. public class FlightCurveChart {
  20. private XYMultipleSeriesDataset dataSet;
  21. private XYMultipleSeriesRenderer mRenderer;
  22. public GraphicalView getView(final Context context) {
  23. XYSeries series = new XYSeries(context.getResources().getString(R.string.fcChart_TitleLable));
  24. this.dataSet = new XYMultipleSeriesDataset(); // collection of series under one object.,there could any
  25. this.dataSet.addSeries(series); // number of series
  26. //customization of the chart
  27. XYSeriesRenderer renderer = new XYSeriesRenderer(); // one renderer for one series
  28. renderer.setColor(Color.RED);
  29. renderer.setDisplayChartValues(false);
  30. renderer.setLineWidth(2f);
  31. this.mRenderer = new XYMultipleSeriesRenderer();
  32. this.mRenderer.addSeriesRenderer(renderer);
  33. this.mRenderer.setMargins(new int[] { 60, 80, 60, 60 }); // top, left, bottom, right
  34. this.mRenderer.setShowLegend(true);
  35. this.mRenderer.setAntialiasing(true);
  36. this.mRenderer.setLabelsColor(Color.BLACK);
  37. // Beschriftungen
  38. this.mRenderer.setChartTitle(context.getResources().getString(R.string.fcChart_Title));
  39. this.mRenderer.setChartTitleTextSize(30);
  40. this.mRenderer.setAxisTitleTextSize(30);
  41. this.mRenderer.setLegendTextSize(30);
  42. this.mRenderer.setLabelFormat(new DecimalFormat("0.##"));
  43. this.mRenderer.setLabelsTextSize(15);
  44. this.mRenderer.setXTitle(context.getResources().getString(R.string.fcChart_TitleXAxis));
  45. this.mRenderer.setXLabelsColor(Color.DKGRAY);
  46. this.mRenderer.setYTitle(context.getResources().getString(R.string.fcChart_TitleYAxis));
  47. this.mRenderer.setYLabelsPadding(20);
  48. this.mRenderer.setYLabelsVerticalPadding(-5);
  49. this.mRenderer.setYLabelsColor(0, Color.DKGRAY);
  50. // Zoom ausschalten
  51. this.mRenderer.setZoomEnabled(false, false);
  52. this.mRenderer.setZoomButtonsVisible(false);
  53. // Grid
  54. this.mRenderer.setShowGridX(true);
  55. this.mRenderer.setShowGridY(true);
  56. this.mRenderer.setGridColor(Color.DKGRAY);
  57. // X/Y-Achsen
  58. this.mRenderer.setShowAxes(true);
  59. this.mRenderer.setAxesColor(Color.DKGRAY);
  60. // Hintergrundfarbe
  61. this.mRenderer.setApplyBackgroundColor(true);
  62. this.mRenderer.setBackgroundColor(context.getResources().getColor(R.color.qrt_translucent_white));
  63. this.mRenderer.setMarginsColor(Color.WHITE);
  64. // Verschiebungen ausschalten
  65. this.mRenderer.setPanEnabled(false, false);
  66. GraphicalView v = ChartFactory.getLineChartView(context, this.dataSet, this.mRenderer);
  67. return v;
  68. }
  69. /**
  70. * @return the dataSet
  71. */
  72. public XYMultipleSeriesDataset getDataSet() {
  73. return this.dataSet;
  74. }
  75. /**
  76. * @return the mRenderer
  77. */
  78. public XYMultipleSeriesRenderer getMultiRenderer() {
  79. return this.mRenderer;
  80. }
  81. public void updateRendererAfterCalculation(final Double shootingDistance, final Double[][] flightCurve) {
  82. Double deltaH;
  83. Double dy;
  84. Double rangeY;
  85. int xLbls = 1;
  86. int yLbls = 1;
  87. Double minH = 0.0;
  88. Double maxH = 0.0;
  89. // X-Achse
  90. if (shootingDistance <= 18d) {
  91. xLbls = (int) Math.round(shootingDistance);
  92. } else if (shootingDistance <= 30d) {
  93. xLbls = (int) Math.round(shootingDistance) / 2;
  94. } else if (shootingDistance <= 90d) {
  95. xLbls = (int) Math.round(shootingDistance) / 5;
  96. } else {
  97. xLbls = (int) Math.round(shootingDistance) / 10;
  98. }
  99. this.mRenderer.setXLabels(xLbls);
  100. // Y-Achse
  101. for (int i = 0; i < flightCurve.length; i++) {
  102. if (flightCurve[i][TrajectoryCalculator.IDX_Y] > maxH) {
  103. maxH = flightCurve[i][TrajectoryCalculator.IDX_Y];
  104. }
  105. }
  106. minH = maxH;
  107. for (int i = 0; i < flightCurve.length; i++) {
  108. if (flightCurve[i][TrajectoryCalculator.IDX_Y] < minH) {
  109. minH = flightCurve[i][TrajectoryCalculator.IDX_Y];
  110. }
  111. }
  112. deltaH = maxH - minH;
  113. if (deltaH <= shootingDistance / 10) {
  114. dy = (shootingDistance / 10 - deltaH) / 2;
  115. rangeY = shootingDistance / 10;
  116. } else if (deltaH <= shootingDistance / 5) {
  117. dy = (shootingDistance / 5 - deltaH) / 2;
  118. rangeY = shootingDistance / 5;
  119. } else {
  120. dy = (deltaH + shootingDistance * 0.1) / 2;
  121. rangeY = deltaH + shootingDistance * 0.1;
  122. }
  123. if (rangeY <= 3d) {
  124. yLbls = 10;
  125. } else if (rangeY <= 6d) {
  126. yLbls = 12;
  127. } else if (rangeY <= 9d) {
  128. yLbls = 18;
  129. } else {
  130. yLbls = 20;
  131. }
  132. this.mRenderer.setYAxisMin(minH - dy);
  133. this.mRenderer.setYAxisMax(maxH + dy);
  134. this.mRenderer.setYLabels(yLbls);
  135. }
  136. }