2

I am facing some weird problems with my (Line) GraphView! To explain it a bit better I'll add a pic that shows what happens when I start scrolling horizontal (vertical scrolling is not needed).

Scrolling Problem

The thing is: The DataPoints are displayed correctly, but not my labels! I wrote the correct label in red color into the pictures above!

Whenever I start scrolling the labels start to "jump" around weirdly.

The DataPoints are received from a SharedPreference file with String/Integer pairs [Strings are always MMMyyyy (f.e. "Mar2020")]

I get the pairs out of my SP-file, put the Strings as static labels into my graph use the DataPoints in this way "logical" way (not the actual code!)

DataPoint[0] = (0, valueOfKey0)
DataPoint[1] = (1, valueOfKey1)

Here is the code how the graph is called for / drawn in the Activity

 private void setupGraph(final GraphView graph, String subName){
    GraphDataHelper graphDataHelper = new GraphDataHelper(mContext);
    LineGraphSeries<DataPoint> series;


    /*Have to call .removeAllSeries to draw each graph individually
    * Otherwise they will be drawn over another!*/
    graph.removeAllSeries();

    /*Gets Values from each Sub
    * --> Gets values form each key/value pair of specific SharedPreference-file
    * --> sets values in order (0, 1, 2,... n)*/
    series = new LineGraphSeries<DataPoint>(graphDataHelper.generateGraphData(subName));
    series.setDrawDataPoints(true);
    series.setColor(getResources().getColor(R.color.casualWhite));
    series.setAnimated(true);

    graph.addSeries(series);

    /*Fill Labels for X-Axis:
    * Get the specific Monthly-Keys for the choosen Sub
    * In special cases extra rules are declared in .getSpecificSubMonthKeys() method
    * Put all entries of ArrayList in Array (StaticLabelsFormatter only works with "normal" Array)*/
    ArrayList<String> array_paths = graphDataHelper.getSpecificSubMonthKeys(subName);
    int size = array_paths.size();

    String[] paths = new String[size];

    for (int i=0; i<size; i++){
        paths[i] = array_paths.get(i);
    }


    StaticLabelsFormatter staticLabelsFormatter = new StaticLabelsFormatter(graph);
    staticLabelsFormatter.setHorizontalLabels(paths);
    graph.getGridLabelRenderer().setLabelFormatter(staticLabelsFormatter);

    graph.getViewport().setXAxisBoundsManual(true);

    if(size == 5 || size > 5){
        graph.getViewport().setMinX(0.0);
        graph.getViewport().setMaxX(4.0);
        graph.getGridLabelRenderer().setNumHorizontalLabels(5);
    } else if(size == 4){
        graph.getViewport().setMinX(0.0);
        graph.getViewport().setMaxX(3.0);
        graph.getGridLabelRenderer().setNumHorizontalLabels(4);
    } else if(size == 3){
        graph.getViewport().setMinX(0.0);
        graph.getViewport().setMaxX(2.0);
        graph.getGridLabelRenderer().setNumHorizontalLabels(3);
    } else if(size == 2){
        graph.getViewport().setMinX(0.0);
        graph.getViewport().setMaxX(1.0);
        graph.getGridLabelRenderer().setNumHorizontalLabels(2);
    }


    graph.getViewport().setScrollable(true);


    graph.getGridLabelRenderer().setHorizontalLabelsColor(getResources().getColor(R.color.midBlue));
    graph.getGridLabelRenderer().setVerticalLabelsColor(getResources().getColor(R.color.midBlue));
    graph.getGridLabelRenderer().setGridColor(getResources().getColor(R.color.darkBlue));
    graph.getGridLabelRenderer().setPadding(50);
    graph.getGridLabelRenderer().setLabelsSpace(30);

I call for .removeAllSeries because the User is able to call for another graph via a dropdown-Spinner.

Also I set different MinX & MaxX Points because there can be the case that an entry doesn't have 5 DataPoints yet and so I change the Viewport in regard of that (didn't find a better solution for that so I am also open for some better code here, but it does work this way). My SharedPreference-file always has a minimun of 2 key/value pairs

Also little extra question: Is there a way to give ONLY the horizontal labels some extra labelspace. If I use setLabelSpace it will also apply on the vertical labels and I do not want that. But the horizontal labels are just so close to the axis.

Also sorry for ugly code. It was my first time using GraphView!

Thanks ahead!

Community
  • 1
  • 1
Sarah
  • 89
  • 7

0 Answers0