android - redonda - Cambiar el tamaño del pulgar de la barra de búsqueda
widget barra busqueda google android (6)
Cree una forma de rectángulo con alto y ancho según lo requiera. Use esta forma como dibujable para su pulgar.
Estoy usando un drawable para seekbar thumb con
android:thumb="@drawable/thumb"
¿Cómo puedo establecer el tamaño de este pulgar en la unidad de inmersión ? Porque uso un estilo para seekbar como
<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>
y quiero tener el pulgar con 12dip
alto y ancho.
Desde el sdk puedes ver que este es el estilo para el SeekBar básico:
<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>
Con esto como el selector de pulgar:
<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>
Debería poder usarlos como base para reemplazar el dibujable que se está utilizando actualmente (Esto se parece a la etapa que tiene que hacer).
Estos dibujables pueden tener diferentes tamaños en diferentes pantallas basadas en un cubo de tamaño de carpeta drawable-hdpi
( drawable-hdpi
, drawable-hdpi
drawable-large-hdpi
etc.) o puede hacer que SeekBar
diferente observe diferentes estilos / tamaños dibujables como los siguientes:
<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"/>
La forma más flexible de establecer el tamaño de pulgar para mí es crear capas dibujables con forma de marcador de posición 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>
Así que básicamente cambiar el tamaño de la forma se estirará dibujable, la forma es transparente por lo que no será visible. Además, el tamaño mínimo de dicho pulgar es el tamaño del mapa de bits.
Aquí hay un ejemplo de diseño:
<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" />
Otra solución simple que funcionó para mí fue el uso de scaleX
y scaleY
. Toda la barra de búsqueda será más grande de esta manera y no solo el pulgar.
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleX="2"
android:scaleY="2" />
También estaba buscando una forma de hacer algo similar y después de ver otras preguntas y poner todas las respuestas juntas, se me ocurrió una forma de cambiar el tamaño del pulgar de Seekbar en onCreate ().
Aquí está mi código de onCreate()
, ligeramente adaptado a sus necesidades.
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;
}
});
Tenga en cuenta que esto funciona para cambiar el tamaño de su pulgar, pero puede estar recortado porque es más grande que la barra de búsqueda que contiene (no estoy seguro de eso). Si se recorta, es posible que necesite crear una barra de búsqueda más alta y crear su propio fondo de barra de búsqueda que coincida con el tamaño que desea para la pantalla.
¡Espero que esto ayude!
Yo trabajo así:
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);
}
}
solo una muestra, en su uso real, debe definir el ancho, alto e imagen de su pulgar en un archivo xml.