Учитывая компоновку ниже, я ожидал, что у меня будет темно-серый круг с (белой) круглой рамкой 2dp.
Box(
modifier = Modifier
.size(100.dp)
.border(2.dp, Color.White, CircleShape)
.clip(CircleShape)
.background(Color.DarkGray)
)
Однако на самом деле это приводит к следующему:
Это ожидаемое поведение? Если да, то есть ли способ применить границу к самому внешнему краю? Я могу получить желаемый эффект, установив содержимое внутри Box
, но мне было интересно, есть ли альтернативный способ.
Вы можете получить границу на внешнем крае, перекрывая другой блок в форме круга, уменьшив .size()
с Box в качестве родителя.
Box {
Box(modifier = Modifier
.size(200.dp)
.clip(CircleShape)
.background(Color.DarkGray)
)
Box(modifier = Modifier
.align(Alignment.Center)
.size(180.dp)
.clip(CircleShape)
.background(Color.Red)
)
}
Подождем более удобного ответа :/
Это ожидаемое поведение — когда обрезка выполняется, некоторые краевые пиксели становятся полупрозрачными, чтобы фигура выглядела более естественно.
Поэтому, когда две одинаковые обрезанные фигуры перекрываются, эти полупрозрачные пиксели сливаются, и вы видите этот артефакт.
Возможное решение - немного отступить от внутреннего круга:
Box(
modifier = Modifier
.size(100.dp)
.border(2.dp, Color.White, CircleShape)
.padding(1.dp)
.clip(CircleShape)
.background(Color.DarkGray)
)
Спасибо, мне пришло в голову поиграть с прокладкой, но я продолжал наносить ее после клипа. Применение отступов, а затем обрезка — отличная идея, жаль, что я не подумал об этом!