2015-10-19 29 views
1

我正在採樣加速計傳感器並使用Graph View庫(4.0.1)實時顯示圖形。當scrollToEnd爲true時,GraphView在實時模式下顯示錯誤圖形

除了圖中的應用程序運作良好是錯誤的:

enter image description here

正如你可以在圖片中看到,Z軸(品紅色)具有〜9.8的值,但在圖中它顯示爲〜15,Y軸(綠色)的值爲0.2,但在圖中我們在零和X軸的同一個想法下。

這裏是我的代碼:

SensorManager sensorManager; 
TextView tvX, tvY, tvZ; 
GraphView graph; 
LineGraphSeries<DataPoint> seriesX, seriesY, seriesZ; 
long startTime; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_runtime_graph); 

    tvX = (TextView) findViewById(R.id.tvAcc_X); // color : blue 
    tvY = (TextView) findViewById(R.id.tvAcc_Y); // color : green 
    tvZ = (TextView) findViewById(R.id.tvAcc_Z); // color : magenta 
    graph = (GraphView) findViewById(R.id.graph); 

    seriesX = new LineGraphSeries<>(); 
    seriesY = new LineGraphSeries<>(); 
    seriesZ = new LineGraphSeries<>(); 

    seriesX.setColor(Color.BLUE); 
    seriesY.setColor(Color.GREEN); 
    seriesZ.setColor(Color.MAGENTA); 

    graph.addSeries(seriesX); 
    graph.addSeries(seriesY); 
    graph.addSeries(seriesZ); 

    startTime = System.nanoTime()/100000000; 

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
} 

@Override 
public void onSensorChanged(SensorEvent event) 
{ 
    tvX.setText(String.valueOf(event.values[0])); 
    tvY.setText(String.valueOf(event.values[1])); 
    tvZ.setText(String.valueOf(event.values[2])); 

    updateGraph((event.timestamp/100000000) - startTime, 
      event.values[0], event.values[1], event.values[2]); 
} 

void updateGraph (final long timestamp, final float x, final float y, final float z) 
{ 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      seriesX.appendData(new DataPoint(timestamp, x), true, 40); 
      seriesY.appendData(new DataPoint(timestamp, y), true, 40); 
      seriesZ.appendData(new DataPoint(timestamp, z), true, 40); 
     } 
    }); 
} 

我發現當scrollToEnd字段設置爲true問題發生,否則圖形是正確的。 我發現的另一個問題可以相關,軸沒有更新的時候scroolToEnd是真的。

有沒有什麼辦法可以解決這個問題? 謝謝!

回答

3

logcat的說明了爲什麼scrollToEnd不工作你的情況:

GraphView: scrollToEnd works only with manual x axis bounds 

設定x軸範圍說明書,在你創建方法

Viewport vp = graph.getViewport(); 
vp.setXAxisBoundsManual(true); 
vp.setMinX(0); 
vp.setMaxX(1000); 

添加此代碼,但還有另外一個問題與代碼: System.nanoTime()event.timestamp是不同的時間格式

System.nanoTime() // current value of system timer in nanoseconds 
event.timestamp // nanoseconds since device uptime 

這不是很好的記錄:SensorEvent timestamp

參見:Accelerometer SensorEvent timestamp

+0

感謝弗蘭克你的答案。關於'timestamp'你真的是對的;關於'界限' - 這正是問題所在。我不想限制\定義最小和最大軸的值,因爲它是從傳感器到傳感器的變化(對於一個傳感器可以是0到2,對於另一個傳感器可以從0到1400)。所以,也許這個問題應該是如何更新Axis – AsfK

+1

你是否需要它對兩個軸都是動態的?如果您只將XAxisBounds設置爲手動,則Y軸將自動縮放。 – Frank

+0

是的,我需要這兩個軸是動態的(我是我的應用程序中的樣本傳感器,所以一個軸是值,第二個是時間戳),但我會嘗試根據sensor.max值限制X軸。非常感謝你! – AsfK

相關問題