Android 图表视图自动滚动线图

Android Graph View auto scrollable Line Graph

我使用 Grap View 创建了一个 line graph,我可以手动左右滚动它,但我无法将它设置为 scroll automatically。到目前为止,我还没有发现有人会尝试这个的线程,所以我想知道 Graph View 是否支持自动滚动。

到目前为止,这是我的代码:

    graph = (GraphView) findViewById(R.id.graph);

    // first series is a line
    DataPoint[] points = new DataPoint[1000];
    for (int i = 0; i < points.length; i++) {
        points[i] = new DataPoint(i, Math.sin(i*0.5) * 20*(Math.random()*10+1));
    }
    series = new LineGraphSeries<>(points);

    // set manual X bounds
    graph.getViewport().setYAxisBoundsManual(true);
    graph.getViewport().setMinY(-150);
    graph.getViewport().setMaxY(200);

    graph.getViewport().setXAxisBoundsManual(true);

    Handler handler1 = new Handler();
    for (orderNr = 1; orderNr < 50 ;orderNr++) {
        handler1.postDelayed(new Runnable() {

            @Override
            public void run() {
                graph.getViewport().setMinX(orderNr);
                graph.getViewport().setMaxX(orderNr + 100);
                graph.addSeries(series);

            }
        }, 1000);
    }
    graph.getViewport().setScrollable(true); // enables horizontal scrolling

如果我不在Thread

内做

graph.getViewport().setMinX(orderNr)
graph.getViewport().setMaxX(orderNr + 100)

将图形设置为在指定位置开始和结束但是当它们被放入 Thread 我认为 Thread 首先完成,达到最大值 orderNr 然后绘制出 graph.

也许有人已经用 MPAndroidChartaChartEngine 或其他东西尝试过这个,可以告诉我我在这里做错了什么。

这个问题也发生在我身上,但我通过将 isScalable 设置为 true 并在每次更新时滚动到结束来解决这个问题。此代码生成一个滚动宽度为 30 且 y 限制为 0 和 1000 的 graphView。

class ScrollingGraphView(context: Context, attrs: AttributeSet): GraphView(context, attrs) {
    private var series = LineGraphSeries<DataPoint>();
    private var x = 0.0

    init {
        addSeries(series)
        viewport.isScrollable = true
        viewport.isScalable = true
        viewport.isYAxisBoundsManual = true
        viewport.setMinY(0.0)
        viewport.setMaxY(1000.0)
        viewport.setMinX(0.0)
        viewport.setMaxX(30.0)
    }

    fun addEntry(y:Double?) {
        if(null != y) {
            x += .1
            series.appendData(DataPoint(x, y), true, 200)
        }
        invalidate()
        viewport.scrollToEnd()
    }