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

  • Fehler beim Aufblasen der Klasse EditText beim Erstellen von TextInputLayout auf Android 4.4.2:
  • Wo bin ich? - Land holen
  • Wie importiere ich Android-Studio-Projekt in Eclipse, die Bibliothek verwenden?
  • Android-Studio wird automatisch geöffnet
  • Typ 'jint' konnte nicht gelöst werden, und JNIEnv, jclass
  • Typische .gitignore-Datei für eine Android-App
  • 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); } 

    }

  • Verständnis von @SuppressLint ("NewApi") Annotation
  • Wie kann ich die Eigentumslängenbegrenzung der "adb shell setprop" überwinden?
  • Robotium In der Suite von Tests wird jeder nächste Test durch den vorherigen Test beeinflusst
  • Android Material Design NestedScrollView / CollapsingToolbarLayout seltsame Verhalten Öffnung Tastatur
  • Java.lang.IllegalArgumentException: AppCompat unterstützt die aktuellen Themenfunktionen nicht
  • Ausführen von Groovy-Skripten, die in Java zur Laufzeit für Android eingebettet sind
  • 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.