SeekBar customization - Wie positioniert man ein benutzerdefiniertes "thumb" Bild?

8

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.

  • In 2.1 ist der Daumen um das Ende der Leiste herum zentriert, mit der Hälfte des Daumens auf der Leiste und der Hälfte davon auf der Leiste.
  • In 2.2 befindet sich der Daumen ohne Überlappung innerhalb der Leiste. Daher die seltsame Art und Weise, wie die Füllwerte das Ergebnis beeinflussen. Das habe ich versucht zu erreichen, aber wenn man einen benutzerdefinierten Daumen benutzt, funktioniert dieser Effekt nicht mehr auf die gleiche Weise.

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?

    
Richard Le Mesurier 12.10.2011, 05:25
quelle

4 Antworten

5

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.

    
Stephen Asherson 07.11.2011, 08:05
quelle
10
%Vor%

Zur Laufzeit. Nicht aus XML!

Problem für mich gelöst.

    
Andrei Aulaska 04.11.2012 17:32
quelle
1

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.

    
Hiral 12.10.2011 05:48
quelle
1

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.

    
Muhammed Refaat 30.09.2014 13:11
quelle

Tags und Links