2017-02-16 31 views
1

我是新來的Android和非常新的android情節。你可以指我一個使用FixedSizeEditableXYSeries的例子嗎?AndroidPlot FixedSizeEditableXYSeries如何使用

我的目標是創建一個流圖,顯示android應用程序中最新的傳感器讀數。

感謝

===================更新 - 在與@Nick討論=============== =====

public class MainActivity extends AppCompatActivity { 


    // Create the redrawer so that the plot is updated 
    private Redrawer redrawer; 

    // create the message receiver - data is received via broadcasts 
    private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Get extra data included in the Intent 
      String message = intent.getStringExtra("CurrentHR"); 

      Log.d("ReceivedHR ",message); 

      // Now put the new data point at the end of the FixedSizeEditableXYSeries, move all data points by 1. 
      for (int index=0;index<9;index++){ 

       if(index<9){ 
        hrHistory.setY(hrHistory.getY(index+1),index); 
       }else{ 
        hrHistory.setY(Float.parseFloat(message),9); 
       } 
      } 


     } 
    }; 

    // create a few references 
    private XYPlot xyPlot; 
    private FixedSizeEditableXYSeries hrHistory; 

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

     // Now find the plot views 
     xyPlot = (XYPlot)findViewById(R.id.xyPlot); 

     // Declare the local broadcast manager 
     LocalBroadcastManager.getInstance(this).registerReceiver(
       mMessageReceiver, new IntentFilter("hrUpdate")); 


     // now put in some data 
     hrHistory = new FixedSizeEditableXYSeries("HR",10); 

     xyPlot.addSeries(hrHistory, new LineAndPointFormatter(Color.GREEN,Color.RED,null,null)); 
     xyPlot.setRangeBoundaries(40, 120, BoundaryMode.FIXED); 
     xyPlot.setDomainBoundaries(0, 20, BoundaryMode.FIXED); 
    } 

    @Override 
    protected void onResume(){ 
     super.onResume(); 


     // set a redraw rate of 1hz and start immediately: 
     redrawer = new Redrawer(xyPlot, 1, true); 
    } 
} 

這給了我一個很好的圖,但沒有線。由於新數據正在填充FixedSizeEditableXYSeries,因此它看起來並不像正在更新的圖。

+0

你想如何顯示數據流?有兩種常用的方法:滾動,其中數據在屏幕上不斷左右移動(例如CPU使用率監視器),缺少更好的名稱,掃描數據從左到右填充屏幕直到屏幕結束時,它會重置回屏幕開始,並覆蓋每個索引處的前一個數據。 (心電圖就是一個很好的例子) – Nick

+0

@Nick,我想在屏幕上從左向右連續移動數據(我想你可以參考這裏的滾動)。我現在將用我現有的代碼更新這個問題,這樣你就可以看到更多。 – MadProgrammer

回答

1

如果你想滾動的行爲,然後FixedSizeEditableXYSeries將是錯誤的選擇;當你的數據滾動時,你基本上排隊了最新的值並且排除了最老的值;鏈表式結構將是更好的選擇。

您可以實現XYSeries和你喜歡的任何合適的數據結構支持它,或者你可以使用SimpleXYSeries,它已經支持隊列操作一拉removeFirst()addLast(...)。在演示應用程序中有一個很好的動態滾動圖示例:OrientationSensorExampleActivity235-245行顯示了上面提到的具體操作。