Ich benutze einen Drawbar für den Suchbar-Daumen mit
Android:thumb="@drawable/thumb"
Wie kann ich die Größe dieses Daumens in dip unit einstellen? Weil ich einen Stil für die Suchbar benutze
<style name="CustomSeekBar">
<item name="Android:indeterminateOnly">false</item>
<item name="Android:minHeight">8dip</item>
<item name="Android:maxHeight">8dip</item>
<item name="Android:thumbOffset">8dip</item>
</style>
und ich möchte den Daumen mit 12dip
Höhe und Breite haben.
Die flexibelste Möglichkeit, die Daumengröße für mich festzulegen, ist das Erstellen von Layered-Drawable mit Form als Platzhalter. thumb_image.xml
:
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape>
<size
Android:height="40dp"
Android:width="40dp" />
<solid Android:color="@Android:color/transparent" />
</shape>
</item>
<item Android:drawable="@drawable/scrubber_control_normal_holo"/>
</layer-list>
Wenn Sie also die Größe der Form ändern, wird sie streckbar und die Form ist transparent, sodass sie nicht sichtbar ist. Die Mindestgröße eines solchen Daumens ist auch die Größe der Bitmap.
Hier ist ein Beispiel für das Layout:
<SeekBar
Android:id="@+id/seekBar1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:thumb="@drawable/thumb_image" />
<SeekBar
Android:id="@+id/seekBar2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
Ich suchte auch nach einer Möglichkeit, etwas Ähnliches zu tun. Nachdem ich einige andere Fragen betrachtet und alle Antworten zusammengestellt hatte, fand ich eine Möglichkeit, den Seekbar-Daumen in onCreate () zu verkleinern.
Hier ist mein Code von onCreate()
, leicht an Ihre Bedürfnisse angepasst.
ViewTreeObserver vto = mySeekBar.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
Resources res = getResources();
Drawable thumb = res.getDrawable(R.drawable.thumb);
int h = mySeekBar.getMeasuredHeight() * 1.5; // 8 * 1.5 = 12
int w = h;
Bitmap bmpOrg = ((BitmapDrawable)thumb).getBitmap();
Bitmap bmpScaled = Bitmap.createScaledBitmap(bmpOrg, w, h, true);
Drawable newThumb = new BitmapDrawable(res, bmpScaled);
newThumb.setBounds(0, 0, newThumb.getIntrinsicWidth(), newThumb.getIntrinsicHeight());
mySeekBar.setThumb(newThumb);
mySeekBar.getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
});
Beachten Sie, dass dies für die Größenänderung Ihres Daumens funktioniert, er kann jedoch abgeschnitten werden, da er größer ist als die enthaltende Suchleiste Hintergrund, der der für die Anzeige gewünschten Größe entspricht.
Hoffe das hilft!
Aus der SDK können Sie erkennen, dass dies der Stil für die grundlegende SeekBar ist:
<style name="Widget.SeekBar">
<item name="Android:indeterminateOnly">false</item>
<item name="Android:progressDrawable">@Android:drawable/progress_horizontal</item>
<item name="Android:indeterminateDrawable">@Android:drawable/progress_horizontal</item>
<item name="Android:minHeight">20dip</item>
<item name="Android:maxHeight">20dip</item>
<item name="Android:thumb">@Android:drawable/seek_thumb</item>
<item name="Android:thumbOffset">8dip</item>
<item name="Android:focusable">true</item>
</style>
Mit diesem als Daumenwähler:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true"
Android:state_window_focused="true"
Android:drawable="@drawable/seek_thumb_pressed" />
<item Android:state_focused="true"
Android:state_window_focused="true"
Android:drawable="@drawable/seek_thumb_selected" />
<item Android:state_selected="true"
Android:state_window_focused="true"
Android:drawable="@drawable/seek_thumb_selected" />
<item Android:drawable="@drawable/seek_thumb_normal" />
</selector>
Sie sollten in der Lage sein, diese als Basis zu verwenden, um die Zeichensätze, die derzeit verwendet werden, zu ersetzen (Dies sieht aus wie die Bühne, auf der Sie sich befinden).
Diese Zeichenarten können auf verschiedenen Bildschirmen unterschiedliche Größen haben, basierend auf dem Eimer für die Zeichenordnergröße (drawable-hdpi
, drawable-large-hdpi
usw.), oder Sie können verschiedene SeekBar
s dazu verwenden, verschiedene Stile/Zeichengrößen wie folgt zu betrachten:
<style name="SeekBar.Thumb.Smiley" parent="@Android:style/Widget.SeekBar">
<item name="Android:thumb">@drawable/smiley</item>
<style>
<style name="SeekBar.Thumb.Smiley.Large" parent="@Android:style/Widget.SeekBar">
<item name="Android:thumb">@drawable/smiley_large</item>
<style>
<SeekBar
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
style="@style/SeekBar.Thumb.Smiley.Large"/>
Eine andere einfache Lösung, die für mich funktionierte, war scaleX
und scaleY
. Die gesamte Suchleiste wird auf diese Weise größer und nicht nur der Daumen.
<SeekBar
Android:id="@+id/seekBar1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:scaleX="2"
Android:scaleY="2" />
Ich arbeite so:
public class FlexibleThumbSeekbar extends SeekBar{
public FlexibleThumbSeekbar (Context context) {
super(context);
}
public FlexibleThumbSeekbar (Context context, AttributeSet attrs) {
super(context, attrs);
Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.thumb);
Bitmap thumb=Bitmap.createBitmap(50,50, Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(thumb);
canvas.drawBitmap(bitmap,new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()),
new Rect(0,0,thumb.getWidth(),thumb.getHeight()),null);
Drawable drawable = new BitmapDrawable(getResources(),thumb);
setThumb(drawable);
}
}
nur ein Beispiel. In Ihrer tatsächlichen Verwendung sollten Sie Breite, Höhe und Bild Ihres Daumens in einer XML-Datei definieren.
Ich habe mein Problem auf diese Weise gelöst
Zuerst habe ich mein Bild/benutzerdefinierte Thumb/Bitmap/andere in eine SVG-Datei mit dem Quellcode converter konvertiert.
Zweitens habe ich meine SVG-Datei in einen Vektor konvertiert, der nach Quelle SVG in Vektor gezeichnet werden kann.
Dann habe ich Vektorcode in der .xml-Datei verwendet, der attrs Android:width="28dp"
und Android:height="28dp"
im Vektor-Tag enthält. Hier können wir die Größe des Daumens ändern.
Zum Schluss habe ich meine thumb.xml in Android:thumb="@drawable/thumb.xml"
des SeekBar-Tags verwendet
Das ist mein thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:viewportWidth="56"
Android:viewportHeight="56"
Android:width="28dp"
Android:height="28dp">
<group
Android:scaleX="2.0"
Android:scaleY="-2.0"
Android:translateY="56">
<path
Android:pathData="M28 14A14 14 0 0 1 14 28 14 14 0 0 1 0 14 14 14 0 0 1 14 0 14 14 0 0 1 28 14Z"
Android:fillColor="#6b6b6b"
Android:fillAlpha="0.205" />
</group>
<group
Android:scaleX="0.1"
Android:scaleY="-0.1"
Android:translateY="56">
<path
Android:pathData="M135 376C83 353 40 311 40 281c0 -22 13 -34 85 -80 85 -54 115 -59 115 -22 0 22 -59 77 -98 92 -26 10 -26 11 36 50 72 46 81 69 25 69 -21 -1 -51 -7 -68 -14z"
Android:fillColor="#000000" />
<path
Android:pathData="M320 366c0 -26 55 -81 98 -97l26 -10 -44 -26c-88 -51 -106 -83 -46 -83 72 0 179 81 163 124 -8 20 -156 116 -179 116 -12 0 -18 -8 -18 -24z"
Android:fillColor="#000000" />
</group>
</vector>
Erstellen Sie eine Form eines Rechtecks mit der gewünschten Höhe und Breite. Verwenden Sie diese Form als Zeichenfläche für den Daumen.