我使用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
。
也许有人用MPAndroidChart
或aChartEngine
或其他方式尝试过此操作,可以告诉我这里做错了什么。
答案 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()
}