2013-05-30 80 views
0

我嘗試閱讀onsensorchanged每x秒,即時通訊使用countdowntimer但每秒鐘只有一個,當方法運行時間不,run方法,每x秒的加速度

private CountDownTimer delay; 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (board!=null && event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     float[] values = event.values; 
     // Movement 
     x =(int) Math.floor(values[0]); 
     y =(int) Math.floor(values[1]); 
     z =(int) Math.floor(values[2]); 
     delay = new countleft(START_DELAY, INTERVAL); 
     delay.start(); 
    } 
} 


class countleft extends CountDownTimer{ 
    public countleft(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
     // TODO Auto-generated constructor stub 
    } 
    @Override 
    public void onFinish() { 
     if(x>=3){ 
      board.right(); 
     } 
     else if(x<=(-3)){ 
      board.left(); 
     } 
     else if(y>=3){ 
      board.up(); 
     } 
     else if(y<=(-3)){    
      board.down(); 
     } 
     START_DELAY = 2000; 
    } 

需要諮詢

+1

你想達到什麼樣產生的呢? – Blackbelt

+0

首先,** onSensorChanged()**在輸入變爲可用時連續調用,可能速度很快。每次通話都會啓動一個新的倒數計時器,因此您可以很快地將數千個倒數計時器並行運行。正如黑帶所說,如果我們確切地知道你想要達到的目標,這將有所幫助。 –

+0

即時嘗試運行方法'board.up()'和其他人只是每1秒, – user2375628

回答

0

我ð表明,onSensorChanged(...)你改變

if (board!=null && event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 

if (delay != null && board!=null && event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 

以便在任何時間點只有一個延遲對象。然後,在countleft.onFinish()類,而不是

START_DELAY = 2000; 

,你需要

delay = null; 

以便下countleft對象可以onSensorChanged(...)

+0

不工作,即時設置敬酒'onTick()'看看發生了什麼,但卡住在2000,1980和2000再次board方法()不運行 – user2375628

+0

我建議你使用大量的'Log.d(...)'來確定發生了什麼。確保在日誌中包含變量的狀態,如延遲,電路板等。 – Stochastically