2
我使用MPAndroidChart來創建加速度計數據的一些實時圖。看起來內存使用量不斷增長,您離開應用程序運行的時間越長,因此我試圖找到一種方法,即在圖表滾動窗口視圖之外移除舊數據點。MPAndroidChart - 實時移除舊數據點圖
問題是,一旦我達到限制的最大點數設置爲保持/顯示,點不再被添加,但圖表不斷滾動。我的數據的大小保持不變(因爲我應該增加一個新點並在每次更新時刪除一箇舊點),但是沒有新的數據顯示在圖表中了。
在我的片段,我創建這樣的圖表中onCreateView
:
accChart = (LineChart) view.findViewById(R.id.accChart);
accChart.setOnChartValueSelectedListener(this);
LineData data = new LineData();
data.setValueTextColor(Color.WHITE);
accChart.setData(data);
然後我聽加速度事件使用傳感器管理器,並添加一個條目每100ms在onSensorChanged
:
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
僅爲其中一個系列,那麼其中一個會得到良好繪圖,但其他兩個是空的,如上所述
這似乎沒有幫助。我在每次調用removeFirst之後添加了它。我也嘗試在每次輸入後添加「無效」,但同樣的問題 – Simon
你應該把它放在添加方法之後! –
在添加塊後添加'data.notifyDataChanged()',然後在刪除塊之後再次添加'data.notifyDataChanged()'。無論我在哪裏添加它,結果都是一樣的 – Simon