2016-04-06 19 views
1

Merhaba, kaç kez atladığınızı ve accelorometre sensörünü kullandığınızı belirten bir jumpApp ile çalışıyorum. Elime aldığım problem, gecikmeyi nasıl koyacağımı gerçekten bilmiyorum, bu yüzden bazen 2 atlama olarak bazen atlama yapılmaz ve bazen iyi çalışır. Her sayı atlayışında yaklaşık 0.4sec olmak istiyorum.Mükemmel bir delaytime nasıl yapılır bu yüzden sadece bir kez sayar

private TextView textView; 
private TextView text; 
private SensorManager sensorManager; 
double ax,ay,az; 
boolean newJumpAccepted = true; 
int numbersOfJumps = 0; 
long startTime = 0; 
int count; 
MediaPlayer mediaPlayer; 
Handler timerHandler = new Handler(); 
Runnable timerRunnable = new Runnable() { 
    @Override 
    public void run() { 
     long millis = System.currentTimeMillis() - startTime; 

     if(millis>400){ 
      newJumpAccepted = true; 
     } else { 
      newJumpAccepted = false; 
     } 


     int seconds = (int) (millis/1000); 
     int minutes = seconds/60; 
     seconds = seconds % 60; 
     timerHandler.postDelayed(this,500); 
    } 
}; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE); 
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST); 
    text = (TextView) findViewById(R.id.text); 
    textView = (TextView) findViewById(R.id.textView); 
} 
@Override 
public void onAccuracyChanged(Sensor arg0, int arg1) { 
} 

@Override 
public void onSensorChanged(SensorEvent event){ 
    SharedPreferences preferences =  PreferenceManager.getDefaultSharedPreferences(this); 
    String result = ""; 
    double d = Math.round(event.values[1]); 
    float threshold = preferences.getFloat("hello", 11); 
    if (d != 0 && d >= threshold && newJumpAccepted){ 
     count++; 
    } 
    Log.i("hej", String.valueOf(d)); 
    text.setText("Jump made" + " " + count + " " + d); 
    text.invalidate(); 
    startTime(); 
} 

private void startTime() { 
    if(newJumpAccepted) { 
     startTime = System.currentTimeMillis(); 
     timerHandler.postDelayed(timerRunnable, 0); 
    } 
    newJumpAccepted = false; 
} 
} 

cevap

0
Timer timer; 
MyTimerTask myTimerTask; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE); 
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST); 
    text = (TextView) findViewById(R.id.text); 
    textView = (TextView) findViewById(R.id.textView); 

    if(timer != null){ 
     timer.cancel(); 
    } 

    timer = new Timer(); 
    myTimerTask = new MyTimerTask(); 

    timer.schedule(myTimerTask, 400, 400); 
} 

class MyTimerTask extends TimerTask { 

    @Override 
    public void run() { 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 

       if (!newJumpAccepted) { 
        text.setText(String.valueOf(count)); 
        newJumpAccepted = true; 
       } 
      } 
     }); 
    } 
} 
İlgili konular