Ich muss eine Suchleiste erstellen, wo ich fast alles programmgesteuert ändern kann. Und jetzt habe ich ein Problem, den Daumen und die Balkengröße zu ändern. Alles funktioniert gut, wenn der Balken größer oder genauso groß wie der Daumen ist, aber wenn der Daumen größer ist als der Balken, kann ich nicht erreichen, dass der gesamte Daumen mit der richtigen Größe des Balkens angezeigt wird.Ändern Sie die Größe der Suchleiste programmgesteuert, aber kann nicht den Daumen größer als die Leiste sein
Hier ist mein Code, um den Daumen zu erstellen:
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);
}
heren meinen Code, die Bar zu erstellen:
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);
}
Hier mein Code ist alles zusammen zu stellen, wo ich die Höhe des Satz Suchleiste:
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);
}
Der XML-Code, wo ich die Bar aufpumpen aus:
Um die Größe der Suchleiste zu ändern, benutze ich ParentLayout.addView (seekbar, params).
Wenn ich die Ansicht hinzufüge, wenn ich die Höhe verwende, die ich zur Leiste haben möchte, wird der Daumen geschnitten. Wenn ich die Höhe des Daumens benutze, erreicht der Balken die gleiche Höhe des Daumens. Android ändert die Größe der Leiste auf die Größe, die ich zum Hinzufügen der Ansicht verwende.
Ich habe versucht, die Größe der GradientDrawable, die die Leiste mit s hape.setSize(width, height)
ist, versuchte ich auch shape.setBounds(0, 0, width, height)
, und ich habe versucht, ein anderes Bild mit der richtigen Größe und Hinzufügen zu der LayerDrawable Mylayer. Aber nichts hat funktioniert.
Wenn Sie dies über XML erstellen, können Sie paddingTop
und paddingBottom
verwenden, um die Leiste auf die richtige Größe zu bringen. Aber ich weiß nicht, wie dies mit dem GradientDrawable programmatisch zu tun ist.
guten job n Danke –