以编程方式更改搜索栏的大小,但无法获得大于酒吧的大拇指

问题描述:

我必须制作一个搜索栏,以便以编程方式更改几乎所有内容。而现在我有一个问题来改变拇指和酒吧的大小。如果条形尺寸与拇指尺寸相同或更大,但一切都很好,但如果拇指比条形大,我无法用整个大拇指显示整个大拇指。以编程方式更改搜索栏的大小,但无法获得大于酒吧的大拇指

这里是我的代码来创建大拇指:

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

继承人我的代码来创建栏:

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

    } 

这里是我的代码,把一切融合在一起,在这里我设置的高度寻求酒吧:

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

    } 

XML代码,我膨胀酒吧从:

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

要更改查找栏的大小,我使用ParentLayout.addView(seekbar,params)。
当添加视图时,如果我使用我想要的高度,酒吧会切割拇指。如果我使用拇指的高度,酒吧会达到拇指的高度。 Android将该栏调整为我用来添加视图的大小。
我尝试设置与s hape.setSize(width, height)酒吧GradientDrawable的大小,我也尝试shape.setBounds(0, 0, width, height),我试图创建另一个图像大小正确并添加到LayerDrawable mylayer。但没有任何工作。

当通过XML创建这个文件时,可以使用paddingToppaddingBottom来获得合适的大小。但我不知道如何以编程方式对GradientDrawable执行此操作。

好,太糟糕了没有回应,但我能够自己回答这个问题。答案是使用InsetDrawable。您必须将条的一个可绘制部分放入InsetDrawable中。

多数民众赞成代码:

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

    } 

我希望这可以帮助别人同样的问题。

+0

做得好n谢谢 –