MPAndroidChart 实时 LineChart 在 addEntry 上跳转
MPAndroidChart Realtime LineChart jumps on addEntry
我使用 MPAndroidChart 来显示定期(每 3 秒)传入的值。这些值被添加到主线程上的数据集,然后调用 setVisibleXRangeMaximum(10)
,然后使用 moveViewToX(dataSet.getEntryCount())
.
将视图移动到末尾
然而,这会导致图表稍微向左移动(大约两个数据点之间宽度的十分之一),而不是显示最新数据。如果我在添加两个点之间滚动,视图会跳转到数据集的开头。
如何实现示例应用中的行为,视图一次显示 10 个条目并在添加时滚动到最新条目?
这是我初始化图表的方式:
// Initializing
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.device_detail_element_graph, parent, false);
LineChart chart = (LineChart) v.findViewById(R.id.lineChart);
LineData lineData = new LineData();
lineData.setDrawValues(false);
chart.setDrawBorders(false);
chart.setDrawMarkers(false);
chart.getLegend().setEnabled(false);
chart.getAxisRight().setEnabled(false);
chart.setDrawGridBackground(false);
chart.setDescription(null);
chart.setData(lineData);
chart.setTouchEnabled(true);
chart.setData(lineData);
chart.notifyDataSetChanged();
以及我如何添加新数据点(定期调用):
LineData data = chart.getData();
ILineDataSet dataSet = data.getDataSetByIndex(0);
if(dataSet == null){
dataSet = new LineDataSet(null, "Dynamic data");
dataSet.setValueTextColor(Color.TRANSPARENT);
dataSet.setHighlightEnabled(false);
data.addDataSet(dataSet);
}
int lastIndex = dataSet.getEntryCount();
dataSet.addEntry(new Entry(lastIndex, (float) newValue.getValue()));
data.notifyDataChanged();
chart.notifyDataSetChanged();
chart.setVisibleXRangeMaximum(20.0f);
chart.moveViewToX(dataSet.getEntryCount());
知道了。当我调用向图表添加新条目的函数时,我总是在图表最终所在的 RecyclerView
上调用 notifyDataChanged
。这以某种方式重置了图表的视图 window,导致跳跃。
我使用 MPAndroidChart 来显示定期(每 3 秒)传入的值。这些值被添加到主线程上的数据集,然后调用 setVisibleXRangeMaximum(10)
,然后使用 moveViewToX(dataSet.getEntryCount())
.
然而,这会导致图表稍微向左移动(大约两个数据点之间宽度的十分之一),而不是显示最新数据。如果我在添加两个点之间滚动,视图会跳转到数据集的开头。
如何实现示例应用中的行为,视图一次显示 10 个条目并在添加时滚动到最新条目?
这是我初始化图表的方式:
// Initializing
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.device_detail_element_graph, parent, false);
LineChart chart = (LineChart) v.findViewById(R.id.lineChart);
LineData lineData = new LineData();
lineData.setDrawValues(false);
chart.setDrawBorders(false);
chart.setDrawMarkers(false);
chart.getLegend().setEnabled(false);
chart.getAxisRight().setEnabled(false);
chart.setDrawGridBackground(false);
chart.setDescription(null);
chart.setData(lineData);
chart.setTouchEnabled(true);
chart.setData(lineData);
chart.notifyDataSetChanged();
以及我如何添加新数据点(定期调用):
LineData data = chart.getData();
ILineDataSet dataSet = data.getDataSetByIndex(0);
if(dataSet == null){
dataSet = new LineDataSet(null, "Dynamic data");
dataSet.setValueTextColor(Color.TRANSPARENT);
dataSet.setHighlightEnabled(false);
data.addDataSet(dataSet);
}
int lastIndex = dataSet.getEntryCount();
dataSet.addEntry(new Entry(lastIndex, (float) newValue.getValue()));
data.notifyDataChanged();
chart.notifyDataSetChanged();
chart.setVisibleXRangeMaximum(20.0f);
chart.moveViewToX(dataSet.getEntryCount());
知道了。当我调用向图表添加新条目的函数时,我总是在图表最终所在的 RecyclerView
上调用 notifyDataChanged
。这以某种方式重置了图表的视图 window,导致跳跃。