Wie programmgesteuert eine runde eckige Grenze mit ShapeDrawable in Android?

Ich muss eine Grenze mit abgerundeten Ecken programmatisch erstellen, indem du ShapeDrawable erweitere. Ich muss einen schwarzen Rand mit abgerundeten Ecken haben, wobei die Pixel auf der Außenseite weiß und die inneren Pixel transparent sind. Der Code, den ich im Moment habe, hat mehrere Probleme, von denen ist, dass es nicht eine glatte Ecke, die die gleiche Dicke wie die Grenze ist und dass die äußeren Pixel der Grenze sind transparent und nicht weiß.

Hier ist ein Bild von den Ecken, die ich gerade bekomme Ecke

  • Reload Android-Anwendung in Emulator ohne Neustart Emulator in Eclipse?
  • Fehler "AdbCommandRejectedException: Gerät nicht gefunden" in Eclipse mit Android Emulator
  • Porter-Duff: unterschiedliches Verhalten für verschiedene Formen?
  • Android: Bitmaps, die aus der Galerie geladen werden, werden in ImageView gedreht
  • Archiv für benötigte Bibliothek konnte nicht gelesen werden oder ist keine gültige ZIP-Datei
  • Ungültige Projektbeschreibung beim Importieren von Projekt in Eclipse
  • Hier ist der Code, wo ich vorbei bin Farbe.TRANSPARENT für 'füllen' im Konstruktor:

    public class CustomShape extends ShapeDrawable { private final Paint fillpaint, strokepaint; public CustomShape(int fill, int strokeWidth,int radius) { super(new RoundRectShape(new float[] { radius, radius, radius, radius, radius, radius, radius, radius }, null, null)); fillpaint = new Paint(this.getPaint()); fillpaint.setColor(fill); strokepaint = new Paint(fillpaint); strokepaint.setStyle(Paint.Style.STROKE); strokepaint.setStrokeWidth(strokeWidth); strokepaint.setColor(Color.BLACK); } @Override protected void onDraw(Shape shape, Canvas canvas, Paint paint) { shape.draw(canvas, fillpaint); shape.draw(canvas, strokepaint); } 

    }

  • AndroidManifest.xml fehlt
  • Fehler beim Auflösen: junit: junit: 4.12 in android studio 1.4 auf ubuntu
  • Ersetzen Sie .apk mit Eclipse ohne Run
  • "Run as" Android-Anwendung fehlt
  • Wie gezwungen, meine Android-Anwendung programmgesteuert zu stoppen?
  • Wie kann ich diese NullPointer Exception debuggen?
  • 4 Solutions collect form web for “Wie programmgesteuert eine runde eckige Grenze mit ShapeDrawable in Android?”

    Wenn du gleichmäßig abgerundete Ecken brauchst (und aus deinem Beispiel, wie es dir geht) kannst du einfach gradentDrawable mit einer festen Farbe verwenden

     GradientDrawable gd = new GradientDrawable(); gd.setColor(Color.RED); gd.setCornerRadius(10); gd.setStroke(2, Color.WHITE); view.setBackground(gd); 

    GradientDrawable Dokumentation finden Sie hier .

    Bearbeiten: Für jede Ecke separat

    Sie können den Radius jeder Ecke separat mit setCornerRadii (float[] radii) Methode angeben. "Für jede Ecke enthält das Array 2 Werte, [X_radius, Y_radius] Die Ecken sind oben links, rechts oben rechts unten rechts unten links. Diese Eigenschaft wird nur geehrt, wenn die Form vom Typ RECTANGLE ist.

    Es wird empfohlen, mutate() aufzurufen mutate() bevor Sie diese Eigenschaft ändern.

    Sie können eine benutzerdefinierte Zeichnung implementieren. Im Folgenden ist das Beispiel der xml.

     <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffffff"/> <stroke android:width="3dp" android:color="#ff000000" /> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" /> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 

    Speichern Sie diese xml im Zeichnungsordner Ihres Projekts. Jetzt benutze es wie ein normales Zeichen für jedes Widget. Zum Beispiel: android: background = "R.drawable.round_shape"

    Dieses Beispiel wird mit folgendem Link referenziert.

     GradientDrawable drawable = (GradientDrawable)image.getBackground(); drawable.setGradientRadius(radiuspx); 

    Zusätzlich zu den runden Eckdimensionen können Sie gradientDrawable und die Methode setCornerRadii ()

     GradientDrawable d = new GradientDrawable(); d.setCornerRadii({5.0f,5.0f,5.0f,5.0f}); textViewExample.setBackgroundResource(d); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.