/**
* This file is part of GraphView.
*
* GraphView is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GraphView is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GraphView. If not, see <http://www.gnu.org/licenses/lgpl.html>.
*
* Copyright Jonas Gehring
*/
package com.jjoe64.graphview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.util.AttributeSet;
import com.jjoe64.graphview.GraphViewSeries.GraphViewSeriesStyle;
/**
* Draws a Bar Chart
*
* @author Muhammad Shahab Hameed
*/
public class BarGraphView extends GraphView {
private boolean drawValuesOnTop;
private int valuesOnTopColor = Color.WHITE;
public BarGraphView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public BarGraphView(Context context, String title) {
super(context, title);
}
// @Override
// protected void drawHorizontalLabels(Canvas canvas, float border,
// float horstart, float height, String[] horlabels, float graphwidth) {
// // horizontal labels + lines
// paint.setTextAlign(Align.CENTER);
//
// int hors = horlabels.length;
// float barwidth = graphwidth/horlabels.length;
// float textOffset = barwidth/2;
// for (int i = 0; i < horlabels.length; i++) {
// // lines
// float x = ((graphwidth / hors) * i) + horstart;
// paint.setColor(graphViewStyle.getGridColor());
// canvas.drawLine(x, height - border, x, border, paint);
//
// if(getShowHorizontalLabels()) {
// // text
// x = barwidth*i + textOffset + horstart;
// paint.setColor(graphViewStyle.getHorizontalLabelsColor());
// canvas.drawText(horlabels[i], x, height - 4, paint);
// }
// }
// }
@Override
public void drawSeries(Canvas canvas, GraphViewDataInterface[] values,
float graphwidth, float graphheight, float border, double minX,
double minY, double diffX, double diffY, float horstart,
GraphViewSeriesStyle style) {
float colwidth = graphwidth / (values.length);
paint.setStrokeWidth(style.thickness);
float offset = 0;
// draw data
for (int i = 0; i < values.length; i++) {
float valY = (float) (values[i].getY() - minY);
float ratY = (float) (valY / diffY);
float y = graphheight * ratY;
// hook for value dependent color
if (style.getValueDependentColor() != null) {
paint.setColor(style.getValueDependentColor().get(values[i]));
} else {
paint.setColor(style.color);
}
float left = (i * colwidth) + horstart - offset;
float top = (border - y) + graphheight;
float right = ((i * colwidth) + horstart) + (colwidth - 1) - offset;
canvas.drawRect(left, top, right, graphheight + border - 1, paint);
// -----Set values on top of graph---------
if (drawValuesOnTop) {
top -= 4;
if (top <= border)
top += border + 4;
paint.setTextAlign(Align.CENTER);
paint.setColor(valuesOnTopColor);
canvas.drawText(String.valueOf(values[i].getY()),
(left + right) / 2, top, paint);
}
}
}
public boolean getDrawValuesOnTop() {
return drawValuesOnTop;
}
public int getValuesOnTopColor() {
return valuesOnTopColor;
}
/**
* You can set the flag to let the GraphView draw the values on top of the
* bars
*
* @param drawValuesOnTop
*/
public void setDrawValuesOnTop(boolean drawValuesOnTop) {
this.drawValuesOnTop = drawValuesOnTop;
}
public void setValuesOnTopColor(int valuesOnTopColor) {
this.valuesOnTopColor = valuesOnTopColor;
}
}