android - 填充剪辑在顶部缩放元素,但不是(真的)在侧面
问题描述
我正在使用LazyColumn
and Row
s 进行网格布局。我还想一次缩放一个元素。当缩放的元素在被(至少部分)剪裁时位于边缘时,就会出现问题。
为什么它发生在顶部,但没有发生在侧面?如何纠正?
这是预期的行为(因此我的代码有问题)还是 Jetpack Compose 中的错误?
private const val NUMBER_OF_COLUMNS = 5
private val SPACING = 20.dp
@Composable
fun MainScreen(
elements: List<String>,
) {
LazyColumn(
modifier = Modifier
.background(Color.Blue)
.padding(50.dp),
verticalArrangement = Arrangement.Absolute.spacedBy(SPACING)
) {
val numberOfRows = ceil(elements.size / NUMBER_OF_COLUMNS.toFloat()).roundToInt()
for (rowIndex in 0 until numberOfRows) {
item {
Row(
horizontalArrangement = Arrangement.Absolute.spacedBy(SPACING)
) {
for (columnIndex in 0 until NUMBER_OF_COLUMNS) {
val itemIndex = (rowIndex * NUMBER_OF_COLUMNS) + columnIndex
if (itemIndex < elements.size) {
GridElement(
text = elements[itemIndex]
)
}
}
}
}
}
}
}
@Composable
private fun GridElement(
text: String,
) {
val scale by remember {
mutableStateOf(
if (text == "1" || text == "9" || text == "11") 1.6f else 1f
)
}
val zIndex by remember {
mutableStateOf(
if (text == "1" || text == "9" || text == "11") 30f else 0f
)
}
Card(
modifier = Modifier
.size(width = 130.dp, height = 100.dp)
.graphicsLayer(
scaleX = scale,
scaleY = scale,
)
.zIndex(zIndex = zIndex),
border = BorderStroke(width = 1.dp, Color.Red),
) {
Text(text = text)
}
}
@Preview(
backgroundColor = 0x666666,
widthDp = 900,
heightDp = 500,
)
@Composable
private fun MainScreenPreview() {
MaterialTheme {
MainScreen(
(1 until 14).map { it.toString() },
)
}
}
结果:
解决方案
我找到了裁剪问题本身的解决方案:
我没有使用Modifier.padding()
onLazyColumn
我使用了Lazycolumn
scontentPadding
参数:
LazyColumn(
modifier = Modifier
.background(Color.Blue)
.padding(50.dp),
verticalArrangement = Arrangement.Absolute.spacedBy(SPACING),
contentPadding = PaddingValues(50.dp),
)
我需要做但没有立即意识到的是禁用clipToPadding
. 我根据这个答案找到了解决方案。
推荐阅读
- virtualbox - 在 VBox 中配置 MAAS 以访问另一个 VBox,PXE 的问题
- npm - 运行 npm audit fix 时出现 404 错误
- r - read_tsv 返回 1 列 df 预期有许多列
- python - 如何在多个客户端之间进行通信?
- excel - Excel:如何计算每个州内的唯一 ID 以及每个州内购买的门票
- reactjs - `onBlur` 未在 'Jodit` wyswig 编辑器代码编辑器模式下触发,`useCallback` 无法正常工作
- azure - 在 Azure VM 上为 HTTPS 配置 SSRS
- python - 在 Matplotlib 中向折线图添加数据标签
- reactjs - 如何在我的 React 应用程序中向 Monaco Editor 添加使用 Antlr4 语法文件功能的自动完成、语法突出显示?
- node.js - 为什么我不能在端口 5000 上运行项目?