Ich habe meine Suchleiste angepasst - ich benutze ein benutzerdefiniertes Bild als Hintergrund und ein benutzerdefiniertes Bild als den Daumen ( Wie erstellt man ein benutzerdefiniertes Layout für Suchleiste in Android? und Wie kann man das Aussehen einer SeekBar in Android anpassen? ).
Die Idee ist, eine SeekBar zu erstellen, die wie die in diesem Bild aussieht:
Ich möchte, dass das Daumenbild perfekt in den abgerundeten Balken passt, wenn der progress
-Wert auf 0 oder 100 (von 100) gesetzt ist.
Um den Daumen richtig zu positionieren (d. h. die Enden des Balkens nicht zu überlappen) habe ich paddingLeft
& amp; paddingRight
entspricht exakt der halben Breite der Daumenbreite ( Android: Seekbar scrollt nicht den ganzen Weg bis zum Ende ).
... / res / layout / main.xml:
%Vor%Dies funktioniert in Android 2.1.
In Android 2.2 erzeugt dies einen anderen Effekt:
Nach weiteren Nachforschungen (und mit einem total default SeekBar
habe ich festgestellt, dass sich die Position des Daumenbildes von 2.1 auf 2.2 geändert hat. Mein Hack, der paddingLeft
& amp; paddingRight
ändert, ist nicht der Problem.
Ich denke, ich muss eine benutzerdefinierte Java-Klasse erstellen, um mit dieser Art von Dingen umzugehen. In dieser Frage ( möglich, abgerundete Ecken in benutzerdefinierten Progressbar progressDrawable tun? ), verwendet der Entwickler ClipDrawable
, um einen normalen Fortschrittsbalken zu erstellen.
Welche Art von Zeichenobjekt würde ich verwenden und wie, um meinen Daumen korrekt zu positionieren?
Das Verhalten des thumbOffset-Parameters hat sich zwischen diesen beiden Versionen geändert. ThumbOffset bestimmt den tatsächlichen Versatz des Daumenbildes im Vergleich zum bereitgestellten Positionsparameter.
Versuchen Sie Folgendes:
%Vor%Ich habe es versucht und es funktionierte perfekt mit 2.1 und 2.2.
Versuchen Sie in Ihrem Fall, maxWidth, max und progress so anzupassen, wie ich es getan habe, und versuchen Sie, Paddings zu entfernen. Es könnte Ihnen bei der Lösung des Problems helfen.
hat schließlich die Antwort gefunden, der Fall hier ist, dass Sie android:thumbOffset
verwenden müssen, aber android:thumbOffset
ist NOT ein Setter für den Daumenplatz zusammen mit dem Fortschrittsbalken, aber es ist der Daumen Länge von es beginnt bis es ist der Mittelpunkt, so dass seekbar
den Mittelpunkt des Daumens am Anfangspunkt anpassen kann. Also, wenn wir ein Daumenbild mit einer Breite von 50 haben, muss der thumbOffset 25 (50/2) sein, damit seekbar
das < strong> Nullwert am Pixel 25 des Daumens, wodurch der Daumen genau in der Mitte erscheint.