webentwicklung-frage-antwort-db.com.de

Größe des Daumen der Suchleiste ändern

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.

27
penguru

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" />

Seek bar with different thumb size

38
andrew

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!

12
Pooks

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 SeekBars 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"/>
7
Graeme

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" />
2
kichik

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.

2
孙纬晓

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>
0
AlekseevIS

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.

0
Yugandhar Babu