2016-02-28 36 views
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僅爲其中一個系列,那麼其中一個會得到良好繪圖,但其他兩個是空的,如上所述

回答

0

嘗試在添加條目後直接調用data.notifyDataChanged()

+0

這似乎沒有幫助。我在每次調用removeFirst之後添加了它。我也嘗試在每次輸入後添加「無效」,但同樣的問題 – Simon

+0

你應該把它放在添加方法之後! –

+0

在添加塊後添加'data.notifyDataChanged()',然後在刪除塊之後再次添加'data.notifyDataChanged()'。無論我在哪裏添加它,結果都是一樣的 – Simon