Android Graph View自动滚动线图

时间:2018-03-19 17:48:27

标签: android android-studio viewport android-graphview linegraph

我使用line graph创建了Grap View,我可以左右手动滚动它,但我无法将其设置为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或其他方式尝试过此操作,可以告诉我这里做错了什么。

1 个答案:

答案 0 :(得分:1)

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

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()
    }