我正在使用MPAndroidChart创建一些加速度计数据的实时图表。看起来内存使用量会随着应用程序的运行时间的延长而持续增长,所以我试图找到一种方法,一旦它们超出了图表滚动窗口的视图就可以删除旧的数据点。
问题在于,一旦达到限制,我设置了要保持/显示的最大点数,不再添加点,但图表会继续滚动。我的数据大小保持不变(因为我应该添加新点并在每次更新时删除旧点),但不再在图表中显示新数据。
在我的片段中,我在onCreateView
中创建了这样的图表:
accChart = (LineChart) view.findViewById(R.id.accChart);
accChart.setOnChartValueSelectedListener(this);
LineData data = new LineData();
data.setValueTextColor(Color.WHITE);
accChart.setData(data);
然后我使用传感器管理器监听加速度计事件,并在onSensorChanged
中每100毫秒添加一个条目:
public void onSensorChanged(SensorEvent event) {
sensor = event.sensor;
curAccX = event.values[0];
curAccY = event.values[1];
curAccZ = event.values[2];
long curTime = System.currentTimeMillis();
long diffTime = (curTime - lastUpdate);
// only allow one update every POLL_FREQUENCY.
if(diffTime > POLL_FREQUENCY) {
lastUpdate = curTime;
addEntry(curAccX, curAccY, curAccZ);
}
}
然后在addEntry
中添加条目我执行此操作:
private void addEntry(float curAccX, float curAccY, float curAccZ){
LineData data = accChart.getData();
if (data != null) {
ILineDataSet xData = data.getDataSetByIndex(0);
ILineDataSet yData = data.getDataSetByIndex(1);
ILineDataSet zData = data.getDataSetByIndex(2);
if (xData == null) {
xData = createSetX();
data.addDataSet(xData);
}
if (yData == null) {
yData = createSetY();
data.addDataSet(yData);
}
if (zData == null) {
zData = createSetZ();
data.addDataSet(zData);
}
// add a new x-value first
data.addXValue(String.valueOf(System.currentTimeMillis()));
data.addEntry(new Entry(curAccX, xData.getEntryCount()), 0);
data.addEntry(new Entry(curAccY, yData.getEntryCount()), 1);
data.addEntry(new Entry(curAccZ, zData.getEntryCount()), 2);
//This is where I remove the first entry for each series
if (xData.getEntryCount() > MAX_POINTS_DISPLAYED){
xData.removeFirst();
yData.removeFirst();
zData.removeFirst();
}
// let the chart know it's data has changed
accChart.notifyDataSetChanged();
// limit the number of visible entries
accChart.setVisibleXRangeMaximum(MAX_POINTS_DISPLAYED);
// move to the latest entry
accChart.moveViewToX(data.getXValCount());
}
}
我认为问题在于我使用removeFirst
。如果我取消注释所有这些行,数据将不断绘制。如果我仅针对其中一个系列取消注释removeFirst
,那么一个被绘制得很好,但另外两个是空的,如上所述
答案 0 :(得分:0)
添加条目后,请尝试直接致电{{1}}。