使用 GraphView 制作条形图

Making bars with GraphView

我已经使用 Graphview 一段时间了,主要是 LineGraphPointGraph,link 到 GraphView 可以在这里找到:Link to GraphView.

但现在我需要一个 LineGraph 可以在需要时填充整个 0-100 和 100-200。例如,当点为 70 时,它将填充整个 0-100 space,看起来像这样。

另一个要求是它仍然需要像 LineGraph 因为它需要能够向右移动。

有没有人知道如何使用 GraphView 完成此操作,或者是否可以使用 GraphView.

完成此操作

或者,如果我将点设置为 50 并将线宽设置为正好覆盖 +/- 50,那么它也会是相同的,但这里的问题是线宽在每个屏幕上都不同。

您可以为 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);
}

这将根据提供的点为您提供以下图片: