2016-07-06 8 views
0

Ich arbeite derzeit an Android-Anwendung, und ich bin mit einem Optimierungsproblem konfrontiert: Ich habe eine seekbar immer wenn der Benutzer den Daumen in der Mitte (der max value ist 100, so durch in der Nähe der Mitte i Mittelwerte zwischen 55 und 45) sollte der Daumen automatisch in die Mitte springen.Wie onProgressChanged() pro Segment ausgelöst wird

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    x=seek.getProgress(); 
    if (x>45 && x<55) { 
     seek.setProgress(50); 
    } 
    socket.emit("move1", x); 
} 

Es funktioniert aber, wenn der Daumen springt das onProgressChanged Ereignis Brennen hält kontinuierlich, bis der Benutzer die Daumen weg vom mittleren Bereich bewegt, so dass diese verbraucht zu viele Ressourcen. Was ich will ist, während der Fortschritt der seekbar zwischen 45 und 55 die onProgressChanged nur einmal brennt.

+0

Verwenden Sie die 'fromUser' boolean zu überprüfen, ob sein der Benutzer den Daumen bewegt, dann, eine Flagge mit , setze die Position und lösche dann die Flagge. – Bonatti

Antwort

0

Dies kann Ihnen helfen - Der Parameter fromUser sagt Ihnen, ob der Fortschritt aufgrund einer Aktion vom Benutzer oder programmgesteuert geändert wurde. Wenn es wurde vom Anwender verändert, und wenn es nicht bereits bei 50 ist, stellen Sie ihn dann auf 50.

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     int x = seekBar.getProgress(); 
     if(fromUser && x != 50 && x > 45 && x < 55) { 
      seekBar.setProgress(50); 
     } 
     .... 
    } 
}); 
+0

danke für die Mühe und Entschuldigung für meine schlechte Erklärung, vor allem: Ich möchte den Daumen Sprung passieren, auch wenn der Benutzer Finger auf der Suchleiste ist, zweitens möchte ich die onProgressChanged nur einmal im [45,55] Bereich laufen . – starter

Verwandte Themen