Verhindert, dass ein einzelner Tap den SeekBar-Fortschritt ändert

8

Ich verwende SeekBar in meiner Android App. Wenn ein Benutzer irgendwo auf SeekBar tippt, wird sein Fortschrittswert geändert. Ich möchte nur, dass sich der Fortschrittswert ändert, wenn der Benutzer den SeekBar thumb (genau wie ein UISlider in iOS) verschiebt.

Ich habe versucht, die Eigenschaft clickable von SeekBar auf false zu setzen, aber das hat nicht funktioniert. Wie kann ich das gewünschte Verhalten erreichen?

    
lohithadas 26.02.2011, 09:24
quelle

11 Antworten

9

Ich hatte diese Woche dasselbe Problem und habe es mit einer benutzerdefinierten SeekBar gelöst: folge meinem Code:

%Vor%

Hoffe das hilft

    
Slim 07.06.2013 21:07
quelle
8

Sieh dir diesen anderen Thread an:

Benutzer kann nicht mit der Seekbar interagieren

Ich habe Folgendes versucht und es funktioniert gut. Beachten Sie, dass meine Suchleiste die Eigenschaft android: max auf 100 gesetzt hat:

%Vor% %Vor%     
Eradicatore 01.08.2011 22:01
quelle
3

Es ist zu spät, aber vielleicht braucht jemand die Lösung. Ich erweitere benutzerdefinierte SeekBar und überschreibe onTouchEvent.

%Vor%     
rstk 28.11.2013 14:07
quelle
1

Ich habe mir eine Lösung ausgedacht, es ist nicht sehr hübsch, aber es sollte den Trick machen ...

Hier ist die Idee:

  1. Erstellen Sie ein unsichtbares Overlay, das den gesamten Schieberegler mit Ausnahme der Daumentaste abdeckt

    (Ich benutzte eine geschwärzte Suchleiste, um als Überlagerung zu fungieren)

  2. Wenn der Daumen gedrückt wird, rufen Sie die bringToFront-Methode auf dem Schieberegler

  3. auf
  4. Wenn der Daumen losgelassen wird, rufen Sie die bringToFront-Methode auf dem unsichtbaren Overlay auf

Hinweis: Damit dies funktioniert, müssen Sie die Größe der Überlagerung so ändern, dass sie alles außer dem Daumen-Knopf bedeckt (ich empfehle zwei Überlagerungen [eine für jede Seite der Daumenknopf])

Wenn Sie den Daumen loslassen, sollten Sie die Größe der Overlays ändern

... wie ich schon sagte, es ist nicht schön. Ich bin mir sicher, es gibt viel bessere Möglichkeiten, es zu tun, aber wenn Sie es getan haben müssen, würde ich das versuchen.

%Vor%     
bornSwift 22.04.2011 19:08
quelle
0
%Vor%

Sie können den Fortschritt vergleichen, wenn Sie die Verfolgung stoppen.

    
lordmegamax 26.02.2013 18:24
quelle
0

Blick auf @lordmegamax Code, fand ich etwas, das nicht funktioniert.

  1. int oldProgress kann nicht in onCreate bleiben, Sie müssen es außerhalb deklarieren.
  2. Wenn Sie searchBar immer von Anfang an starten, gibt onStartTrackingTouch immer 0 zurück, so dass Ihr onStopTrackingTouch niemals funktioniert.

Ich habe ein wenig nachgedacht und eine Lösung gefunden.

%Vor%

Ich hoffe, es hilft. Mit freundlichen Grüßen

PS: Dies ist mein erster Beitrag, tut mir leid, wenn ich etwas falsch gemacht habe.

    
iMee 26.04.2013 17:52
quelle
0

Dieser funktioniert perfekt mit dem Ereignis-Listener in SeekBar.

PS. Ich habe diesen Code von Slim verbessert, um ihn allgemeiner zu machen.

%Vor%     
zinuzoid 27.01.2015 15:31
quelle
0

Mit diesem Code können Sie den Daumen zum Verschieben nach Benutzer deaktivieren

%Vor%

wobei "time" eine Ganzzahlvariable ist und den Fortschritt festhält

%Vor%     
AndroidLad 09.04.2015 13:10
quelle
0
%Vor%     
Oscar 17.05.2016 05:19
quelle
0

Eine weitere Option, die ich noch nicht vorgeschlagen habe: eine Unterklasse, die empfangene Bewegungsereignisse übersetzt, damit jede Geste in der Mitte des Daumens beginnt. Dies hat folgende Auswirkungen auf das zugrunde liegende Suchleistenverhalten:

  • das Anklopfen erzeugt keine Bewegung des Daumens (wie bei anderen vorgeschlagenen Lösungen);
  • Durch Ausführen einer Wischgeste, die weg vom Daumen aus startet, kann der Daumen (anders als bei anderen vorgeschlagenen Lösungen) immer noch problemlos übersetzt werden.

Code

%Vor%

Demo

Touch location wird gezeigt, um das beschriebene Verhalten zu veranschaulichen.

    
stkent 02.03.2017 20:16
quelle
0

Zum Deaktivieren einzelner Tippen auf seebBar können Sie die Zeit zwischen DOWN und UP-Ereignissen beobachten, normalerweise Dauer der einzelnen Tippen Sie weniger als 100 ms.

%Vor%     
Illya 22.09.2017 12:51
quelle