Изменение размера бегунка большого пальца - PullRequest
27 голосов
/ 14 марта 2012

Я использую drawable для пролистывания большого пальца с

android:thumb="@drawable/thumb"

Как установить размер этого большого пальца в dip ? Потому что я использую стиль для seekbar, как

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

и я хочу иметь большой палец с 12dip высотой и шириной.

Ответы [ 7 ]

41 голосов
/ 01 сентября 2013

Самый гибкий способ установить размер большого пальца для меня - создать многоуровневое рисование с формой в качестве заполнителя 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>

Таким образом, в основном изменение размера фигуры будет растягиваться, форма прозрачна, поэтому она не будет видна. Также минимальным размером такого большого пальца является размер растрового изображения.

Вот пример макета:

<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

12 голосов
/ 23 января 2013

Я также искал способ сделать что-то похожее, и, посмотрев на некоторые другие вопросы и собрав все ответы, я нашел способ изменить размер большого пальца Seekbar в onCreate ().

Вот мой код из onCreate(), слегка адаптированный к вашим потребностям.

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;
        }
    });

Обратите внимание, что это работает для изменения размера вашего большого пальца, но он может быть обрезан, потому что он больше, чем содержащая панель поиска (не уверен в этом),Если оно обрезается, вам может потребоваться создать более высокую панель поиска и создать собственный фон панели поиска, соответствующий размеру экрана, который вы хотите.

Надеюсь, это поможет!

7 голосов
/ 11 февраля 2013

Из SDK вы можете видеть, что это стиль для основного SeekBar:

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

С этим в качестве селектора большого пальца:

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

Вы должны быть в состоянии использовать этив качестве основы для замены отрисовки, которая используется в данный момент (похоже, что вы попали на сцену).

Эти рисунки могут быть разных размеров на разных экранах в зависимости от размера папки для рисования (drawable-hdpi, drawable-large-hdpi и т. Д.) Или вы можете по-разному SeekBar смотреть на разные стили / размеры рисования, например:

<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"/>
2 голосов
/ 11 декабря 2017

Другое простое решение, которое работало для меня, это использование scaleX и scaleY. Вся панель поиска будет больше, а не только большой палец.

<SeekBar
    android:id="@+id/seekBar1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleX="2"
    android:scaleY="2" />
2 голосов
/ 06 августа 2015

Я работаю так:

    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);
        }
}

просто образец, в вашем реальном использовании вы должны определить ширину, высоту и изображение вашего большого пальца в файле XML.

0 голосов
/ 16 января 2019

Я решил свою проблему таким образом

Сначала я преобразовал свое изображение / пользовательский большой палец / растровое изображение / другое в SVG-файл по источнику конвертер

Второй,Я конвертировал свой SVG-файл в вектор, который можно нарисовать по источнику SVG в вектор

Затем я использовал векторный код в файле .xml, который имеет атрибуты android:width="28dp" и android:height="28dp" в векторном теге,Здесь мы можем изменить размер большого пальца.

Наконец, я использовал мой thumb.xml в android:thumb="@drawable/thumb.xml" тега SeekBar

Это мой 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 голосов
/ 14 марта 2012

Создайте форму прямоугольника с высотой и шириной, как вам нужно. Используйте эту форму для рисования большим пальцем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...