Intereting Posts
Обнаруживать, загружается ли веб-страница в встроенное приложение Facebook на iOS / Android Как показать текст на изображении Oauth 2.0 авторизация для LinkedIn в Android Можно ли показывать индикатор выполнения при загрузке изображения через Retrofit 2 Как отобразить мое местоположение на Google Maps для Android API v2 Почему setWidth не работает? Как узнать, активен ли Android TalkBack? Включение виртуализации Intel (VT-X) без опции в BIOS Как создать форму кольца в Android? Обновление пользовательского интерфейса с использованием библиотеки привязки данных Как изящно обрабатывать исключение внутри AsyncTask в Android? Android: запуск приложения из «последних приложений» запускает его с помощью последнего набора дополнительных функций, используемых в намерении Волновая анимация в Android TextView Ограничения базы данных SQLite в Android Поиск не отвечает при нажатии на панели инструментов AppCompat

Изменение размера указателя большого пальца

Я использую drawable for seekbar thumb с

android:thumb="@drawable/thumb" 

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

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

Solutions Collecting From Web of "Изменение размера указателя большого пальца"

Самый гибкий способ установить размер большого пальца для меня – создать многоуровневую форму с thumb_image.xml как placeholder 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" /> 

Стрелка поиска с большим размером большого пальца

Я также искал способ сделать что-то подобное, и, посмотрев на некоторые другие вопросы и объединив все ответы, я придумал способ изменить размер стрелки 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; } }); 

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

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

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

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

  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-файле.

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