Закругленные углы рисуются с помощью кода
У меня есть рисунок, который иногда меняет цвета, но он всегда должен иметь закругленные углы. Это для библиотеки пользовательского интерфейса, поэтому я не знаю, какие у нее будут цвета. 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;
}
}
РЕДАКТИРОВАТЬ: добавлено сглаживание по краям.