Search code examples
androidgraphscrollview

Draw Graph in android using Graphview?


I want to create a bars graph on my android application.
I need the graph on a scrollView.

I've tried already GraphView and AndroidPlot.


Solution

  • UPDATE

    The new update to the GraphView doesn't support this approach

    Using GraphView:

    I have made a function below that takes three arrays as parameter. First one takes X-axis labels, next takes Y-axis labels and last takes values to be plotted.

    Code

    private void renderGraph(String[] xAxis, String[] yAxis, float[] data) {
    
            GraphViewData[] data = new GraphViewData[xAxis.length];//this class is defined below
    
            double v = 1, w = 1;
            int num = xAxis.length;
            for (int j = 0; j < num; j++) {
                v = data[j];
                data[j] = new GraphViewData(j, v);
            }
            GraphViewSeries example1 = new GraphViewSeries(data);
            GraphView graphView = new BarGraphView(this, "GRAPH TITLE");
            graphView.setVerticalLabels(yAxis);
            graphView.setHorizontalLabels(xAxis);
            graphView.addSeries(example1);
            example1.getStyle().color = Color.BLUE;
            graphView.setScalable(true);
            graphView.getGraphViewStyle().setTextSize(18);
            graphView.setScrollable(false);
            graphView.getGraphViewStyle().setGridColor(Color.DKGRAY);
            graphView.getGraphViewStyle().setGridStyle(GridStyle.VERTICAL);
            graphView.getGraphViewStyle().setNumHorizontalLabels(5);
            LinearLayout layout = (LinearLayout) findViewById(R.id.graphz);//graphz is defined in layout
            layout.addView(graphView);
        }
    

    GraphViewData class:

    This class is little bit variant from the one given in documentation.

       public class GraphViewData implements GraphViewDataInterface {
    
        private double x, y;
    
        public GraphViewData(double x, double y) {
            super();
            this.x = x;
            this.y = y;
        }
    
        @Override
        public double getX() {
            // TODO Auto-generated method stub
            return this.x;
        }
    
        @Override
        public double getY() {
            // TODO Auto-generated method stub
            return this.y;
        }
    }
    

    P.S.

    Call this method as:

    String[] xAxis = {"RED","WHITE","BLUE","GREEN"};
    String[] yAxis = {"GOOD", "AVEGRAGE", "BAD"};
    String[] data = {"1", "2", "1","2"};
    renderGraph(xAxis, yAxis, data);