Изменение размера указателя большого пальца
Я использую растягиваемый для большого пальца указателя с
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
.
Ответы
Ответ 1
Самый гибкий способ задать размер большого пальца для меня - создать многоуровневую форму с фигурой в качестве заполнителя 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]()
Ответ 2
Я также искал способ сделать что-то подобное, и, посмотрев на некоторые другие вопросы и объединив все ответы, я придумал способ изменить размер стрелки 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;
}
});
Обратите внимание, что это работает для изменения размера большого пальца, но оно может быть обрезано, потому что оно больше, чем содержащаяся панель поиска (не уверен в этом).
Если он обрезается, вам может потребоваться создать более высокий уровень поиска и создать собственный фоновый рисунок, соответствующий размеру, который вы хотите отображать.
Надеюсь, это поможет!
Ответ 3
Из 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"/>
Ответ 4
Я работаю следующим образом:
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 файле.
Ответ 5
Другим простым решением для меня было использование scaleX
и scaleY
. Вся стрелка будет больше, а не только большим.
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleX="2"
android:scaleY="2" />
Ответ 6
Создайте форму прямоугольника с высотой и шириной по мере необходимости. Используйте эту форму как вытягиваемую для большого пальца.
Ответ 7
Я решил свою проблему таким образом
Во-первых, я преобразовал свое изображение/пользовательский большой палец/растровое изображение/другое в SVG файл с помощью конвертера исходного кода.
Во-вторых, я конвертировал свой SVG файл в вектор, который можно нарисовать из исходного SVG в вектор
Затем я использовал векторный код в файле .xml, который имеет attrs 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>