2017-01-12 8 views
1

Я хочу нарисовать округленный прямоугольник с методом drawRoundRect в Android.drawRoundRect в Android не работает

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

Я использую Android Studio, и мое использование устройства тестирования Android 6.0.1, API 23

Это часть моего кода. Он работает, когда я помещаю нули в rx и ry.

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

Это рисует черный прямоугольник на моем экране.

Но когда я пытаюсь сделать это округлый,

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

Он ничего не рисует. Это только рисует белый фон ....

Я пробовал разные цифры, как 100, 3, 5, 0.03f и т.д. в ом и гу,

но любые числа больше 0 сделать drawRoundRect() не работает.

Есть ли что-то не так с моим кодом ...?

ответ

0

вы можете попробовать это у нас есть немного расчета, но это работает грозно

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); 
} 

или вы можете проверить это

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

Попробуйте это,

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

Убедитесь, что координаты в RectF, которые используются для рисования округленного прямоугольника. Это означает: rect.left < rect.right и rect.top < rect.bottom.

Похоже, что Android 7 исправляет неправильные координаты и рисует желаемый округленный прямоугольник, но Android 6 ничего не рисует, если есть проблемы с координатами.