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
.
也许有人已经用 MPAndroidChart
或 aChartEngine
或其他东西尝试过这个,可以告诉我我在这里做错了什么。
这个问题也发生在我身上,但我通过将 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()
}
我使用 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
.
也许有人已经用 MPAndroidChart
或 aChartEngine
或其他东西尝试过这个,可以告诉我我在这里做错了什么。
这个问题也发生在我身上,但我通过将 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()
}