Guest User

Untitled

a guest
Nov 12th, 2012
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.37 KB | None | 0 0
  1. import android.graphics.*;
  2. import com.androidplot.exception.PlotRenderException;
  3. import com.androidplot.series.XYSeries;
  4. import com.androidplot.util.ValPixConverter;
  5. import com.androidplot.xy.BarFormatter;
  6. import com.androidplot.xy.XYPlot;
  7. import com.androidplot.xy.XYSeriesRenderer;
  8.  
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.TreeMap;
  12.  
  13. /**
  14. * Renders a point as a Bar
  15. */
  16. public class OptimisedBarRenderer extends XYSeriesRenderer<BarFormatter> {
  17.  
  18. private BarWidthStyle style = BarWidthStyle.FIXED_WIDTH;
  19. private float barWidth = 5;
  20.  
  21. public OptimisedBarRenderer(XYPlot plot) {
  22. super(plot);
  23. }
  24.  
  25. /**
  26. * Sets the width of the bars draw.
  27. * @param barWidth
  28. */
  29. public void setBarWidth(float barWidth) {
  30. this.barWidth = barWidth;
  31. }
  32.  
  33. private final TreeMap<Number, XYSeries> tempSeriesMap = new TreeMap<Number, XYSeries>();
  34.  
  35. @Override
  36. public void onRender(Canvas canvas, RectF plotArea) throws PlotRenderException {
  37. int longest = getLongestSeries();
  38. if(longest == 0) {
  39. return; // no data, nothing to do.
  40. }
  41. tempSeriesMap.clear();
  42.  
  43. for(int i = 0; i < longest; i++) {
  44. tempSeriesMap.clear();
  45. List<XYSeries> seriesList = getPlot().getSeriesListForRenderer(this.getClass());
  46. for(XYSeries series : seriesList) {
  47. if(i < series.size()) {
  48. tempSeriesMap.put(series.getY(i), series);
  49. }
  50. }
  51. drawBars(canvas, plotArea, tempSeriesMap, i);
  52. }
  53. }
  54.  
  55. @Override
  56. public void doDrawLegendIcon(Canvas canvas, RectF rect, BarFormatter formatter) {
  57. canvas.drawRect(rect, formatter.getFillPaint());
  58. canvas.drawRect(rect, formatter.getBorderPaint());
  59. }
  60.  
  61. private int getLongestSeries() {
  62. int longest = 0;
  63. List<XYSeries> seriesList = getPlot().getSeriesListForRenderer(this.getClass());
  64.  
  65. if(seriesList == null)
  66. return 0;
  67.  
  68. for(XYSeries series :seriesList) {
  69. int seriesSize = series.size();
  70. if(seriesSize > longest) {
  71. longest = seriesSize;
  72. }
  73. }
  74. return longest;
  75. }
  76.  
  77. private void drawBars(Canvas canvas, RectF plotArea, TreeMap<Number, XYSeries> seriesMap, int x) {
  78. // Paint p = new Paint();
  79. // p.setColor(Color.RED);
  80.  
  81. Object[] oa = seriesMap.entrySet().toArray();
  82. Map.Entry<Number, XYSeries> entry;
  83. Number yVal = null;
  84. Number xVal = null;
  85.  
  86. float halfWidth = barWidth * 0.5f;
  87.  
  88. for(int i = oa.length-1; i >= 0; i--) {
  89. entry = (Map.Entry<Number, XYSeries>) oa[i];
  90. XYSeries tempEntry = entry.getValue();
  91.  
  92. if(tempEntry != null) {
  93. yVal = tempEntry.getY(x);
  94. xVal = tempEntry.getX(x);
  95.  
  96. if (yVal != null && xVal != null) { // make sure there's a real value to draw
  97. switch (style) {
  98. case FIXED_WIDTH:
  99. float pixX = ValPixConverter.valToPix(xVal.doubleValue(), getPlot().getCalculatedMinX().doubleValue(), getPlot().getCalculatedMaxX().doubleValue(), plotArea.width(), false) + plotArea.left;
  100.  
  101. float left = pixX - halfWidth;
  102. float right = pixX + halfWidth;
  103.  
  104. boolean offScreen = left > plotArea.right || right < plotArea.left;
  105.  
  106. if(!offScreen){
  107. float pixY = ValPixConverter.valToPix(yVal.doubleValue(), getPlot().getCalculatedMinY().doubleValue(), getPlot().getCalculatedMaxY().doubleValue(), plotArea.height(), true) + plotArea.top;
  108.  
  109. BarFormatter formatter = getFormatter(tempEntry);
  110. if(Math.abs (left - right) > 1f){//Don't draw as it will be hidden anyway.
  111. canvas.drawRect(left, pixY, right, plotArea.bottom, formatter.getFillPaint());
  112. }
  113. canvas.drawRect(left, pixY, right, plotArea.bottom, formatter.getBorderPaint());
  114.  
  115. }
  116. break;
  117. default:
  118. throw new UnsupportedOperationException("Not yet implemented.");
  119. }
  120. }
  121. }
  122. }
  123. }
  124. }
Add Comment
Please, Sign In to add comment