Проблема горизонтальной метки с GraphView при прокрутке - PullRequest
1 голос
/ 04 апреля 2019

Я столкнулся с некоторыми странными проблемами с моим (Line) GraphView! Чтобы объяснить это немного лучше, я добавлю картинку, которая показывает, что происходит, когда я начинаю прокручивать по горизонтали (вертикальная прокрутка не нужна).

Scrolling Problem

Дело в том, что: Точки данных отображаются правильно, но не мои метки! Я написал правильную метку красного цвета на картинках выше!

Всякий раз, когда я начинаю прокручивать, ярлыки начинают странно "прыгать".

DataPoints получены из файла SharedPreference с парами String / Integer [Строки всегда MMMyyyy (например, "Mar2020")]

Я получаю пары из моего SP-файла, помещаю строки в качестве статических меток в мой график, используя DataPoints таким «логическим» образом (не реальный код!)

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

Вот код, как график вызывается / рисуется в Деятельности

 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);

Я призываю .removeAllSeries, потому что Пользователь может вызвать другой график через выпадающий Spinner.

Также я установил разные точки MinX и MaxX, потому что может быть случай, когда запись еще не имеет 5 DataPoints, и поэтому я изменяю область просмотра в связи с этим (не нашел лучшего решения для этого, поэтому я также открыт для некоторого лучшего кода здесь, но это работает таким образом). Мой SharedPreference-файл всегда имеет минимум 2 пары ключ / значение

Также небольшой дополнительный вопрос: есть ли способ дать ТОЛЬКО горизонтальным меткам дополнительное пространство для меток. Если я использую setLabelSpace, это также будет применяться к вертикальным меткам, и я не хочу этого Но горизонтальные метки расположены так близко к оси.

Также извините за уродливый код. Я впервые использовал GraphView!

Спасибо, вперед!

...