【问题标题】:Android Graph View auto scrollable Line GraphAndroid Graph View 自动滚动折线图
【发布时间】:2018-03-19 17:48:27
【问题描述】:

我使用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 或其他东西尝试过这个,可以告诉我我做错了什么。

【问题讨论】:

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


    【解决方案1】:

    这个问题也发生在我身上,但我通过将 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()
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多