2013-05-15 53 views
4

我已經使用創建了動態線圖AChartEngine Api,它顯示了G-Force值的變化。所有的工作都很好,但是當圖形在X軸上向前移動時,我必須手動在X軸上滾動以進一步查看它,如果您沒有正確地找到我,請檢查下面的圖像。

enter image description here如何使用AChartEngine動態線圖和X軸自動平移(滾動)?

我該如何讓它在x軸上自動滾動以避免手動滾動?

以下是我的代碼

public class GraphActivity extends Activity implements SensorEventListener{ 

    private LinearLayout lyGforce; 


    //=== G-force ======= 
    private SensorManager mSensorManager; 
    private Sensor mAccelerometer; 
    private float gOffset; 
    private boolean calibrate; 
    private static TimeSeries timeSeriesGforce; 
    private static XYMultipleSeriesDataset datasetGforce; 
    private static XYMultipleSeriesRenderer rendererGforce; 
    private static XYSeriesRenderer rendererSeriesGforce; 
    private static GraphicalView viewGforce; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mainactivity); 

     lyGforce = (LinearLayout) findViewById(R.id.lygforce); 

     //=========== G-force ======= 
     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

     datasetGforce = new XYMultipleSeriesDataset(); 
     rendererGforce = new XYMultipleSeriesRenderer(); 
     rendererGforce.setApplyBackgroundColor(true); 
     rendererGforce.setBackgroundColor(Color.argb(100, 50, 50, 50)); 
     rendererGforce.setAxisTitleTextSize(16); 
     rendererGforce.setChartTitleTextSize(20); 
     rendererGforce.setLabelsTextSize(15); 
     rendererGforce.setLegendTextSize(15); 
     rendererGforce.setMargins(new int[] { 20, 30, 15, 0 }); 
     rendererGforce.setZoomButtonsVisible(true); 
     rendererGforce.setPointSize(10); 
     rendererGforce.setShowGrid(true); 
     rendererGforce.setGridColor(Color.WHITE); 

     rendererSeriesGforce = new XYSeriesRenderer(); 
     rendererSeriesGforce.setColor(Color.GREEN); 
     rendererSeriesGforce.setLineWidth(2); 

     rendererGforce.addSeriesRenderer(rendererSeriesGforce); 

     timeSeriesGforce = new TimeSeries("G-Force"); 

     datasetGforce.addSeries(timeSeriesGforce); 

     viewGforce = ChartFactory.getTimeChartView(this, datasetGforce, rendererGforce, ""); 
     viewGforce.refreshDrawableState(); 
     viewGforce.repaint(); 

     lyGforce.addView(viewGforce); 


    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 

     // ============= G-force ==================// 
     calibrate = true; 
     mSensorManager.registerListener(this, mAccelerometer, 
       SensorManager.SENSOR_DELAY_UI); 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 

     //========== G-force=============// 
     mSensorManager.unregisterListener(this); 
    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    //========== G-force=============// 
    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 

     switch (event.sensor.getType()) { 

      case Sensor.TYPE_ACCELEROMETER: 

       float x = event.values[0]; 
       float y = event.values[1]; // Use to calculate G-Force value 
       float z = event.values[2]; 

       if(calibrate) 
        gOffset = y - SensorManager.GRAVITY_EARTH; 

       double gForce = ((y - gOffset)/SensorManager.GRAVITY_EARTH); 

       timeSeriesGforce.add(new Date(), gForce); 

        rendererGforce.setXAxisMax(rendererGforce.getXAxisMax() + 30); 
      rendererGforce.setXAxisMin(rendererGforce.getXAxisMin() + 30); 

       viewGforce.repaint(); 

       Log.e("NIRAV","G-Force: "+String.valueOf(gForce)); 

       calibrate = false; 

      break; 

      default: 
       break; 
     } 
    } 

} 

回答

7

您可以通過在X軸上改變可視區域做到這一點:

renderer.setXAxisMin(min); 
renderer.setXAxisMax(max); 
+0

@丹.. thanx的答覆.. PLZ檢查我的我的問題添加我的代碼PLZ讓我知道在哪裏以及如何使用setXAxisMin()&setXAxisMax()方法? –

+0

在repaint()調用之前放置代碼。最小值和最大值應該是希望可見範圍介於兩者之間的X軸值。 –

+0

@丹..它工作thnx .. +1 ...但它的滾動速度較慢,然後我的圖形在X軸上前進..我編輯我的代碼,並把這兩種方法之前repaint(),因爲你告訴.. PLZ幫助小更多..什麼值應該是「最大」和「最小」? –