我必须创建一个搜索栏,我可以通过编程方式更改几乎所有内容.现在我有一个问题是改变拇指和条形尺寸.如果酒吧比拇指更大或尺寸相同,一切都很好,但如果拇指比酒吧大,我不能让它显示整个拇指的正确尺寸.
这是我创建拇指的代码:
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,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,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 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,height); ClipDrawable clip = new ClipDrawable(shape,Gravity.LEFT,ClipDrawable.HORIZONTAL); shape = new GradientDrawable(Orientation.BOTTOM_TOP,getResources().getColor(R.color.DimGray)}); shape.setCornerRadius(50);//change the corners of the rectangle shape.setSize(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,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将栏的大小调整为我用来添加视图的大小.
我尝试设置GradientDrawable的大小,即带有shape.setSize(宽度,高度)的栏,我也尝试了shape.setBounds(0,height),我尝试使用正确的大小创建另一个图像并添加到LayerDrawable mylayer.但没有任何效果.
通过XML创建时,可以使用paddingTop和paddingBottom将条形图调整到合适的大小.但我不知道如何以编程方式对GradientDrawable执行此操作.
解决方法
好吧,太糟糕没有回应,但我能够自己回答这个问题.答案是使用InsetDrawable.您必须将条形的一个drawable放入InsetDrawable中.
这是代码:
public void setSeekBarProgress(int width,int bColor){ GradientDrawable shape2 = new GradientDrawable(Orientation.BOTTOM_TOP,bColor)}); shape2.setCornerRadius(50); ClipDrawable clip = new ClipDrawable(shape2,ClipDrawable.HORIZONTAL); GradientDrawable shape1 = new GradientDrawable(Orientation.BOTTOM_TOP,getResources().getColor(R.color.DimGray)}); shape1.setCornerRadius(50);//change the corners of the rectangle InsetDrawable d1= new InsetDrawable(shape1,5,5);//the padding u want to use LayerDrawable mylayer = new LayerDrawable(new Drawable[]{d1,clip}); seekbar.setProgressDrawable(mylayer); seekbar.setProgress(50); }
我希望这可以帮助其他人解决同样的问题.