以编程方式更改搜索栏的大小,但无法获得大于酒吧的大拇指
问题描述:
我必须制作一个搜索栏,以便以编程方式更改几乎所有内容。而现在我有一个问题来改变拇指和酒吧的大小。如果条形尺寸与拇指尺寸相同或更大,但一切都很好,但如果拇指比条形大,我无法用整个大拇指显示整个大拇指。以编程方式更改搜索栏的大小,但无法获得大于酒吧的大拇指
这里是我的代码来创建大拇指:
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创建这个文件时,可以使用paddingTop
和paddingBottom
来获得合适的大小。但我不知道如何以编程方式对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);
}
我希望这可以帮助别人同样的问题。
做得好n谢谢 –