Я пытаюсь реализовать подкласс LinearLayout, который рисуется с закругленными углами. Из моего исследования я установил setWillNotDraw(false)
и переопределил onDraw()
, чтобы нарисовать округленный прямоугольник в холсте:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
canvas.restoreToCount(sc);
}
где:
drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
DST_IN
кажется правильным здесь (в соответствии с примером APIDemos), но область, которая должна быть прозрачной (округленная), имеет вместо этого черный фон, а углы детей все еще видны. Это результат работы Galaxy Nexus с Android 4.2.2:
Любые подсказки?
EDIT: Вот что я хотел бы добиться, извините за грубость фотошопа:)
EDIT 2: я добавил в GitHub пример запускаемого проекта: https://github.com/venator85/RoundClippingLayout
Спасибо;)