@Override protected ClickableArea[] clickableAreasForPoints( List<Float> points, List<Double> values, float yAxisValue, int seriesIndex, int startIndex) { int seriesNr = mDataset.getSeriesCount(); int length = points.size(); ClickableArea[] ret = new ClickableArea[length / 2]; float halfDiffX = getHalfDiffX(points, length, seriesNr); for (int i = 0; i < length; i += 2) { float x = points.get(i); float y = points.get(i + 1); if (mType == Type.STACKED || mType == Type.HEAPED) { ret[i / 2] = new ClickableArea( new RectF( x - halfDiffX, Math.min(y, yAxisValue), x + halfDiffX, Math.max(y, yAxisValue)), values.get(i), values.get(i + 1)); } else { float startX = x - seriesNr * halfDiffX + seriesIndex * 2 * halfDiffX; ret[i / 2] = new ClickableArea( new RectF( startX, Math.min(y, yAxisValue), startX + 2 * halfDiffX, Math.max(y, yAxisValue)), values.get(i), values.get(i + 1)); } } return ret; }
/** * Draws a bar. * * @param canvas the canvas * @param xMin the X axis minimum * @param yMin the Y axis minimum * @param xMax the X axis maximum * @param yMax the Y axis maximum * @param scale the scale index * @param seriesIndex the current series index * @param paint the paint */ protected void drawBar( Canvas canvas, float xMin, float yMin, float xMax, float yMax, int scale, int seriesIndex, Paint paint) { // Fix negative bars issue in Android 4.2 float temp; if (xMin > xMax) { temp = xMin; xMin = xMax; xMax = temp; } if (yMin > yMax) { temp = yMin; yMin = yMax; yMax = temp; } SimpleSeriesRenderer renderer = mRenderer.getSeriesRendererAt(seriesIndex); if (renderer.isGradientEnabled()) { float minY = (float) toScreenPoint(new double[] {0, renderer.getGradientStopValue()}, scale)[1]; float maxY = (float) toScreenPoint(new double[] {0, renderer.getGradientStartValue()}, scale)[1]; float gradientMinY = Math.max(minY, Math.min(yMin, yMax)); float gradientMaxY = Math.min(maxY, Math.max(yMin, yMax)); int gradientMinColor = renderer.getGradientStopColor(); int gradientMaxColor = renderer.getGradientStartColor(); int gradientStartColor = gradientMaxColor; int gradientStopColor = gradientMinColor; if (yMin < minY) { paint.setColor(gradientMinColor); canvas.drawRect( Math.round(xMin), Math.round(yMin), Math.round(xMax), Math.round(gradientMinY), paint); } else { gradientStopColor = getGradientPartialColor( gradientMinColor, gradientMaxColor, (maxY - gradientMinY) / (maxY - minY)); } if (yMax > maxY) { paint.setColor(gradientMaxColor); canvas.drawRect( Math.round(xMin), Math.round(gradientMaxY), Math.round(xMax), Math.round(yMax), paint); } else { gradientStartColor = getGradientPartialColor( gradientMaxColor, gradientMinColor, (gradientMaxY - minY) / (maxY - minY)); } GradientDrawable gradient = new GradientDrawable( Orientation.BOTTOM_TOP, new int[] {gradientStartColor, gradientStopColor}); gradient.setBounds( Math.round(xMin), Math.round(gradientMinY), Math.round(xMax), Math.round(gradientMaxY)); gradient.draw(canvas); } else { if (Math.abs(yMin - yMax) < 1) { if (yMin < yMax) { yMax = yMin + 1; } else { yMax = yMin - 1; } } canvas.drawRect( Math.round(xMin), Math.round(yMin), Math.round(xMax), Math.round(yMax), paint); } }