Cambiar el tamaño de la barra de búsqueda programáticamente pero no puede obtener el pulgar para ser más grande que la barra

Tengo que hacer un seekbar donde puedo cambiar casi todo programmatically. Y ahora estoy teniendo un problema para cambiar el pulgar y el tamaño de la barra. Todo funciona bien si la barra es más grande o del mismo tamaño que el pulgar, pero si el pulgar es más grande que la barra, no puedo conseguir que muestre el pulgar completo con el tamaño correcto de la barra.

Aquí está mi código para crear el pulgar:

public void setSeekBarThumb(int width, int height, int rColor, int gColor, int bColor){ ShapeDrawable thumb = new ShapeDrawable( new OvalShape() ); thumb.setIntrinsicHeight( height ); thumb.setIntrinsicWidth( width ); thumb.setBounds(new Rect(0, 0, width, height)); StateListDrawable states = new StateListDrawable(); states.addState(new int[] {android.R.attr.state_pressed},thumb );//add to the state list with the state pressed thumb = new ShapeDrawable( new OvalShape() ); thumb.setIntrinsicHeight( height ); thumb.setIntrinsicWidth( width ); thumb.setBounds(new Rect(0, 0, width, height)); states.addState(new int[] { },thumb );//add to the state list with no state seekbar.setThumb(states); seekbar.setThumbOffset(0); } 

Heres mi código para crear la barra:

  public void setSeekBarProgress(int width, int height, int rColor, int gColor, int bColor){ GradientDrawable shape = new GradientDrawable(Orientation.BOTTOM_TOP, new int[]{Color.WHITE,Color.rgb(rColor, gColor, bColor)}); shape.setCornerRadius(50); shape.setSize(width, height); shape.setBounds(0, 0, width, height); ClipDrawable clip = new ClipDrawable(shape, Gravity.LEFT,ClipDrawable.HORIZONTAL); shape = new GradientDrawable(Orientation.BOTTOM_TOP, new int[]{Color.WHITE, getResources().getColor(R.color.DimGray)}); shape.setCornerRadius(50);//change the corners of the rectangle shape.setSize(width, height); shape.setBounds(0, 0, width, height); LayerDrawable mylayer= new LayerDrawable(new Drawable[]{shape, clip,}); seekbar.setProgressDrawable(mylayer); seekbar.setProgress(50); } 

Aquí está mi código para poner todo junto, donde establezco la altura de la barra de búsqueda:

  public MySeekBar(Activity activity, AbsoluteLayout ParentLayout, SeekBarParameters parameters) { super(activity.getApplicationContext()); seekbar =(SeekBar)activity.getLayoutInflater().inflate(R.layout.horizontal_seek_bar, ParentLayout,false); seekbar.setMax(100); setSeekBarThumb(parameters.widthThumb, parameters.heightThumb,0,100,0); setSeekBarProgress(parameters.width, parameters.height,255,69,0); int drawHeight; if(parameters.height>parameters.heightThumb) drawHeight=parameters.height; else drawHeight=parameters.heightThumb; AbsoluteLayout.LayoutParams params = new AsoluteLayout.LayoutParams(parameters.width,drawHeight,parameters.xPosition, parameters.yPosition); ParentLayout.addView(seekbar, params); } 

El código XML en el que hincho la barra de:

  <SeekBar xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_gravity="center" android:max="100" android:progress="0" android:secondaryProgress="0" android:maxHeight="10000dip" android:id="@+id/slider" /> 

Para cambiar el tamaño de la barra de búsqueda, utilizo ParentLayout.addView (seekbar, params).
Al agregar la vista, si utilizo la altura que quiero a la barra, el pulgar se corta. Si utilizo la altura del pulgar, la barra llega a la misma altura del pulgar. Android cambia el tamaño de la barra al tamaño que utilizo para agregar la vista.
He intentado establecer el tamaño de la GradientDrawable que es la barra con s hape.setSize(width, height) , también traté shape.setBounds(0, 0, width, height) , y traté de crear otra imagen con el tamaño correcto y Agregando a la capa de LayerDrawable mylayer. Pero nada funcionó.

Al crear esto a través de XML es posible utilizar paddingTop y paddingBottom para conseguir la barra al tamaño correcto. Pero no sé cómo hacer esto a la GradientDrawable programaticamente.

One Solution collect form web for “Cambiar el tamaño de la barra de búsqueda programáticamente pero no puede obtener el pulgar para ser más grande que la barra”

Bueno, muy mal no hubo respuestas, pero pude responder a la pregunta yo mismo. La respuesta es utilizar InsetDrawable. Usted tiene que poner el uno de los drawables de la barra en un InsetDrawable.

Ese es el código:

  public void setSeekBarProgress(int width, int height, int rColor, int gColor, int bColor){ GradientDrawable shape2 = new GradientDrawable(Orientation.BOTTOM_TOP, new int[]{Color.WHITE,Color.rgb(rColor, gColor, bColor)}); shape2.setCornerRadius(50); ClipDrawable clip = new ClipDrawable(shape2, Gravity.LEFT,ClipDrawable.HORIZONTAL); GradientDrawable shape1 = new GradientDrawable(Orientation.BOTTOM_TOP, new int[]{Color.WHITE, getResources().getColor(R.color.DimGray)}); shape1.setCornerRadius(50);//change the corners of the rectangle InsetDrawable d1= new InsetDrawable(shape1,5,5,5,5);//the padding u want to use LayerDrawable mylayer = new LayerDrawable(new Drawable[]{d1,clip}); seekbar.setProgressDrawable(mylayer); seekbar.setProgress(50); } 

Espero que esto pueda ayudar a alguien con el mismo problema.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.