For your help I have created few Graph APIs for android platform.
Today I am sharing the Bar Graph APIs. This java class is a view which
you can add to your Activity. The Bar graph this API create are of three
type as shown in the figures(Norma, Stacked, Grouped). The details are
given Below
| Class | BarGraphView |
| Super Class | View |
| Constructors | public BarGraphView(Context context) |
| public BarGraphView(Context context, int[] _data, int _graphWidth, int _graphHeight, int _graphOriginX, int _graphOriginY, String _yAxisLabel, String _barLabels[]) | |
| public BarGraphView(Context context, int[] _data, int _graphWidth, int _graphHeight, int _graphOriginX, int _graphOriginY, String _yAxisLabel, String _barLabels[], int _style, int _grouping) |
package com.nhpc.nhpc;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Align;
import android.view.View;
class BarGraphView extends View {
private int data[]={15,65,29,68,12,25};
private int color[]={ 0xff3298CE, 0xffCB3398, 0xffFE9900, 0xff3266C8, 0xffCBCC65, 0xff029834, 0xffFFCC00, 0xffD70000, 0xff00CF60 };
private int graphWidth=200; // Default Width of graph
private int graphHeight=200; // Default graph height
private int graphOriginX=60; // Default Origin coordinates X and Y
private int graphOriginY=50;
private String yAxisLabel = "Y Axis Label"; // Default label of Y axis
private String barLabels[]= {"Bar1", "Bar2", "Bar3", "Bar4", "Bar5", "Bar6", "Bar7", "Bar8", "Bar9", "Bar10", "Bar11", "Bar12"};
private int style = 0;
private int grouping = 2;
public BarGraphView(Context context) {
super(context);
}
public BarGraphView(Context context, int[] _data, int _graphWidth, int _graphHeight, int _graphOriginX, int _graphOriginY, String _yAxisLabel, String _barLabels[]) {
super(context);
data = _data;
graphWidth = _graphWidth;
graphHeight = _graphHeight;
graphOriginX = _graphOriginX;
graphOriginY = _graphOriginY;
yAxisLabel = _yAxisLabel;
}
public BarGraphView(Context context, int[] _data, int _graphWidth, int _graphHeight, int _graphOriginX, int _graphOriginY, String _yAxisLabel, String _barLabels[], int _style, int _grouping) {
super(context);
data = _data;
graphWidth = _graphWidth;
graphHeight = _graphHeight;
graphOriginX = _graphOriginX;
graphOriginY = _graphOriginY;
yAxisLabel = _yAxisLabel;
style = _style;
grouping = _grouping;
}
@Override
public void onDraw(Canvas canvas) {
Paint paint = new Paint();
if(graphHeight<200)
paint.setTextSize(10);
else
paint.setTextSize(20);
//int _width = getWidth()-(getWidth()-(graphOriginX+graphWidth)); // set the right hand extent of graph
int _width = (graphOriginX+graphWidth); // set the right hand extent of graph
if(getWidth() - _width <10)
_width = getWidth()-20;
int _height = (int)(getHeight()-graphOriginY-graphHeight);// set the top extent of graph
if(_height<20)
_height=20;
int originX = graphOriginX; // set the left hand extent
int originY = getHeight()-graphOriginY; // set the bottom extent
paint.setColor(Color.WHITE);
float padding;
if(style == 0 || style == 11)
padding = (float) (((float)(_width-originX)/(float)data.length)*0.20);
else
padding = (float) (((float)(_width-originX)/(float)((float)(data.length)/(float)grouping))*0.20);
//Drawing Y Axis
Rect yAxis = new Rect(originX,(int)(_height),originX+2,originY);
canvas.drawRect(yAxis, paint);
//Draw grid parallel to X-Axis
int maxVal = ((int)(getMaximum(data)/10)+1)*10;
paint.setColor(Color.WHITE);
float ratio = (float) ((float)(originY-_height)/(float)maxVal); // i value is equal to this much height
float scale = (float)maxVal*ratio/10;
for(int i=1;i<=10;i++){
paint.setColor(Color.LTGRAY);
if(maxVal<10)
canvas.drawText((maxVal*i/10)+"", originX-15, originY-(scale*i)+5, paint);
else if(maxVal<100)
canvas.drawText((maxVal*i/10)+"", originX-25, originY-(scale*i)+5, paint);
else
canvas.drawText((maxVal*i/10)+"", originX-35, originY-(scale*i)+5, paint);
Rect grid = new Rect(originX,(int)(originY-1-(scale*i)),_width,(int)(originY-(scale*i)));
if(i<10)
canvas.drawRect(grid, paint);
}
paint.setTextAlign(Align.CENTER);
int tempX = originX + (int)padding;
int heightBar;
int j=0;
//Draw Bars
if(style == 0)
{
for(int i=0;i<data.length;i++)
{
if(padding*4 <10)
paint.setTextSize(8);
else
paint.setTextSize(15);
paint.setColor(color[i%color.length]);
heightBar=(int) (((originY-(_height))-(data[i]*ratio))+(_height));
canvas.drawText(data[i]+"", tempX+padding*2, heightBar-5, paint);
canvas.drawText(barLabels[i], tempX+padding*2, originY+20, paint);
Rect bar = new Rect( tempX ,heightBar,(int)(tempX+padding*4),originY);
canvas.drawRect(bar, paint);
tempX = (int)(tempX+padding*5);
}
}
else if(style == 11){
for(int i=0;i<data.length;i++)
{
if(i>0)
if(i%grouping == 0)
tempX = (int)(tempX+padding*(grouping+4));
else
tempX = (int)(tempX+padding*4);
paint.setColor(color[(i%grouping)%color.length]);
heightBar=(int) (((originY-(_height))-(data[i]*ratio))+(_height));
canvas.drawText(data[i]+"", tempX+padding*2, heightBar-5, paint);
Rect bar = new Rect( tempX ,heightBar,(int)(tempX+padding*4),originY);
canvas.drawRect(bar, paint);
paint.setColor(Color.WHITE);
if(i%grouping == 0)
canvas.drawText(barLabels[j++], (float) (tempX+2.5*grouping*padding), originY+20, paint);
}
}
else
{
int temp=0;
for(int i=0;i<data.length;i++)
{
if(i>0 && i%grouping == 0)
{
tempX = (int)(tempX + padding*5);
temp = 0;
}
paint.setColor(color[(i%grouping)%color.length]);
if(i%grouping == 0)
heightBar=(int) ((originY)-(data[i]*ratio));
else
heightBar=(int) ((temp)-(data[i]*ratio));
Rect bar = new Rect( tempX ,heightBar,(int)(tempX+padding*4),(temp==0)?originY:temp);
temp=heightBar;
canvas.drawRect(bar, paint);
paint.setColor(Color.BLACK);
canvas.drawText(data[i]+"", tempX+padding*2, heightBar+20, paint);
paint.setColor(Color.WHITE);
if(i%grouping == 0)
canvas.drawText(barLabels[j++], (float) (tempX+2*padding), originY+20, paint);
}
}
//Drawing X Axis
paint.setColor(Color.WHITE);
Rect xAxis = new Rect(originX,originY-2,_width,originY);
canvas.drawRect(xAxis, paint);
//Drawing Y-axis label
Rect rect = new Rect();
paint.getTextBounds(yAxisLabel, 0, yAxisLabel.length(), rect);
paint.setColor(Color.WHITE);
paint.setStyle(Paint.Style.FILL);
if(maxVal<10)
{
canvas.rotate(-90, graphOriginX-25, getHeight()-graphOriginY-graphHeight/2); // rotating the text
canvas.drawText(yAxisLabel, graphOriginX-20, getHeight()-graphOriginY-graphHeight/2, paint);
}
else if(maxVal<100)
{
canvas.rotate(-90, graphOriginX-35, getHeight()-graphOriginY-graphHeight/2); // rotating the text
canvas.drawText(yAxisLabel, graphOriginX-30, getHeight()-graphOriginY-graphHeight/2, paint);
}
else
{
canvas.rotate(-90, graphOriginX-45, getHeight()-graphOriginY-graphHeight/2); // rotating the text
canvas.drawText(yAxisLabel, graphOriginX-40, getHeight()-graphOriginY-graphHeight/2, paint);
}
}
public int getMaximum(int arr[])
{
int max = 0;
if(style == 0 || style == 11)
{
max = arr[0];
for(int i=1;i<arr.length;i++)
{
if(max<arr[i])
max = arr[i];
}
}
else
{
for(int i=0;i<grouping;i++)
max+=arr[i];
int temp=0;
for(int i=grouping;i<arr.length;i++)
{
temp=temp+arr[i];
if((i+1)%grouping ==0)
{
if(max<temp)
{
max=temp;
}
temp=0;
}
}
}
return max;
}
}
4
Feb
- Simple Bar Graph
- Stacked Bar Graphs
- Grouped Bar Graph












First, we need the image that we'll use for our map overlay. Here, we'll use the Android on the right as our marker. Drag this image (or your own) to the res/drawable/ directory of your project workspace.
Because we created our ItemizedOverlay class with an ArrayList, we can continue adding new OverlayItems. Try adding another one. Before the 
















