Создание баров с GraphView - PullRequest
       17

Создание баров с GraphView

0 голосов
/ 29 августа 2018

Я уже некоторое время использую Graphview, и в основном LineGraph и PointGraph, ссылку на GraphView можно найти здесь: Ссылка на GraphView .

Но теперь мне нужно LineGraph, которое бы заполнило целые 0-100 и 100-200 при необходимости. Например, когда точка равна 70, она будет заполнять все пространство 0-100, что будет выглядеть примерно так:

Другое требование заключается в том, что он все еще должен быть похож на LineGraph, поскольку он должен иметь возможность двигаться вправо.

enter image description here

Кто-нибудь имеет представление, как это можно сделать с помощью GraphView или вообще можно ли это сделать с помощью GraphView.

Или, может быть, если я установлю точку равной 50 и толщине линии, чтобы она покрывала ровно +/- 50, тогда это тоже будет то же самое, но проблема в том, что толщина линии различна на каждом экране.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать собственную форму для PointGraphSeries, чтобы получить эффект, который вам нравится. В следующем коде я создаю собственный прямоугольник. Это может дать вам некоторые идеи о том, что делать:

int mX = 0;

private void addPoints(double point, PointsGraphSeries<DataPoint> series) {
    point = Math.floor(point / 100) * 100;
    DataPoint dataPoint = new DataPoint(mX++, point);
    series.appendData(dataPoint, false, 100);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    GraphView graph = findViewById(R.id.graph);
    // Set manual X bounds
    graph.getViewport().setXAxisBoundsManual(true);
    graph.getViewport().setMinX(0);
    graph.getViewport().setMaxX(10);


    // Set manual Y bounds
    graph.getViewport().setYAxisBoundsManual(true);
    graph.getViewport().setMinY(0);
    graph.getViewport().setMaxY(1000);

    // Set up the number of division for horizontal and vertical units
    graph.getGridLabelRenderer().setNumHorizontalLabels(11);
    graph.getGridLabelRenderer().setNumVerticalLabels(11);

    PointsGraphSeries<DataPoint> series = new PointsGraphSeries<>();

    series.setCustomShape(new PointsGraphSeries.CustomShape() {
        @Override
        public void draw(Canvas canvas,
                         Paint paint,
                         float x,
                         float y,
                         DataPointInterface dataPoint) {
            canvas.drawRect(x, y - 100, x + 175, y, paint);
        }
    });

    int[] points = {450, 512, 323, 240, 70, 790};
    for (int i = 0; i < points.length; i++) {
        addPoints(points[i], series);
    }

    graph.addSeries(series);
}

Это даст вам следующую картину на основе предоставленных очков:

enter image description here

...