2017-01-12 2 views
1

Ich möchte ein abgerundetes Rechteck mit DrawRoundRect-Methode in Android zeichnen.drawRoundRect in Android funktioniert nicht

void drawRoundRect (RectF rect, float rx, float ry, Paint paint) 

Ich bin mit Android Studio und mein Testgerät Verwendung Android 6.0.1 API 23

Dieser Teil meines Codes ist. Es funktioniert, wenn ich Nullen in rx und ry setze.

public void draw(Canvas canvas){ 
     canvas.drawColor(Color.WHITE); 
     canvas.drawRoundRect(rect, 0, 0, pnt); 
} 

Dies zeichnet ein schwarzes Rechteck in meinem Bildschirm.

Aber wenn ich versuche es abgerundet zu machen,

public void draw(Canvas canvas){ 
     canvas.drawColor(Color.WHITE); 
     canvas.drawRoundRect(rect, 10, 10, pnt); 
} 

Es zieht nichts. Dies zieht nur weißen Hintergrund ....

ich verschiedene Nummern versucht, wie 100, 3, 5, 0.03f etc in rx und ry,

aber alle Zahlen größer als 0 machen drawRoundRect() nicht funktioniert.

Gibt es etwas falsch mit meinem Code ...?

Antwort

0

können Sie dies versuchen, haben wir eine kleine Rechnung, aber es funktioniert awesomely

private void drawRoundedRect(Canvas canvas, float left, float top, float right, float bottom) { 
    float radius = getHeight()/2; 
    canvas.drawCircle(radius, radius, radius, mainPaint); 
    canvas.drawCircle(right - radius, radius, radius, mainPaint); 
    canvas.drawRect(left + radius, top, right - radius, bottom, mainPaint); 
} 

oder Sie können prüfen, diese

RectF rect = new RectF(10,10,20,20); 
canvas.drawRoundRect(rect , 0, 0, mPaint); 
0

die Sie interessieren,

Bitmap bitmap = Bitmap.createBitmap(
         600, // Width 
         300, // Height 
         Bitmap.Config.ARGB_8888 // Config 
       ); 

       Canvas canvas = new Canvas(bitmap); 
       canvas.drawColor(Color.WHITE); 
       Paint paint = new Paint(); 
       paint.setStyle(Paint.Style.FILL); 
       paint.setColor(Color.RED); 
       paint.setAntiAlias(true); 

       int offset = 50; 
       RectF rectF = new RectF(
         offset, // left 
         offset, // top 
         canvas.getWidth() - offset, // right 
         canvas.getHeight() - offset // bottom 
       ); 
       int cornersRadius = 25; 
       canvas.drawRoundRect(
         rectF, // rect 
         cornersRadius, // rx 
         cornersRadius, // ry 
         paint // Paint 
       ); 
       mImageView.setImageBitmap(bitmap); 
0

Achten Sie darauf, dass Koordinaten in RectF, das zum Zeichnen abgerundeten Rechtecks ​​verwendet wird, sind korrekt. Das bedeutet: rect.left < rect.right und rect.top < rect.bottom.

Es scheint, dass Android 7 falsche Koordinaten selbst korrigiert und das gewünschte abgerundete Rechteck zeichnet, aber Android 6 zeichnet nichts, wenn es ein Problem mit Koordinaten gibt.

Verwandte Themen