Закругленные углы рисуются с помощью кода

У меня есть рисунок, который иногда меняет цвета, но он всегда должен иметь закругленные углы. Это для библиотеки пользовательского интерфейса, поэтому я не знаю, какие у нее будут цвета. XML не вариант, я должен достичь этого с чистой Java.

Есть ли способ достичь этого программно БЕЗ использования XML?

3 ответа

Решение

Создайте пользовательский Drawable (то есть расширяйте Drawable) и в его onDraw используйте Canvas.drawRoundRect(RectF rect, float rx, float ry, Paint paint), устанавливая Paint на желаемый цвет.

Если вы рисуете отрисовку самостоятельно, вы можете установить путь обрезки с помощью Canvas.clipPath. Путь будет состоять из одного или нескольких прямоугольников и нескольких кругов, которые ограничивают скругленные углы. Возможно, вам придется поэкспериментировать с расположением компонентов пути, пока вы не получите желаемый результат.

Основываясь на ответе @nmw, вот код, который работает для этого:

public class RRDrawable extends Drawable {
    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public RRDrawable(int color) {
        paint.setColor(color);
        paint.setStyle(Paint.Style.FILL);
    }

    @Override
    public void draw(Canvas canvas) {
        int radius = 10; // note this is actual pixels
        canvas.drawRoundRect(new RectF(0,0,canvas.getWidth(), canvas.getHeight()), radius, radius,  paint);
    }

    @Override
    public void setAlpha(int i) {
        //.. not supported
    }

    @Override
    public void setColorFilter(ColorFilter colorFilter) {
        //.. not supported
    }

    @Override
    public int getOpacity() {
        return 1;
    }
}

РЕДАКТИРОВАТЬ: добавлено сглаживание по краям.

(источник)

Другие вопросы по тегам