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,导致跳跃。