2015-10-17 3 views
0

Начиная с Android 6, метод drawOval, кажется, рисует прямоугольник вместо круга, когда для стиля рисования задано значение Paint.Style.STROKE. Если стиль рисования установлен в Paint.Style.FILL или FILL_AND_STROKE, все кажется прекрасным. Посмотрите, как это выглядит на следующих снимках.На Android 6.0 drawOval рисует прямоугольник, когда стиль рисования установлен в Pain.Style.STROKE

Pre Android 6

Pre Android 6

Android 6

Android 6

зеленый прямоугольник должен быть зеленый круг от масштаба

Не e, что рисунок сделан в прямоугольнике с размерами 1.0f на 1.0f. Все работает отлично на всех версиях Android, кроме 6.0.

Спасибо

ответ

1

Я управлять им с помощью вспомогательной функции, что Масштабирует холст на больший прямоугольник (100x100), рисует круг и масштаб обратно холста к исходному размеру.

public static void drawOval(Canvas canvas, RectF rectangle, Paint paint, float scale) { 
    float originalStrokeWidth = paint.getStrokeWidth(); 
    float upScaling = 100f; 
    paint.setStrokeWidth(originalStrokeWidth * upScaling); 
    canvas.save(); 
    RectF newRect = new RectF(); 
    newRect.left = rectangle.left*upScaling; 
    newRect.top = rectangle.top*upScaling; 
    newRect.right = rectangle.right*upScaling; 
    newRect.bottom = rectangle.bottom*upScaling; 
    canvas.scale(scale/upScaling, scale/upScaling); 
    canvas.drawOval(newRect, paint); 
    canvas.restore(); 
    paint.setStrokeWidth(originalStrokeWidth); 
} 
public static void drawOval(Canvas canvas, RectF rectangle, Paint paint) { 
    drawOval(canvas, rectangle, paint, 1f); 
} 

Итак, где я имел canvas.drawOval (Прямоугольник, краска) я заменить его CanvasUtils.drawOval (холст, прямоугольник, краска);

Я заметил, что «ошибка» происходит только тогда, когда я использую растровое изображение как холст и рисую это растровое изображение в качестве фона датчика.

 Смежные вопросы

  • Нет связанных вопросов^_^