android Jetpack构图-使用屏幕外偏移绘制形状并使用非常大的尺寸

g0czyy6m  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(127)

对于背景元素,我尝试简单地绘制一个非常大的填充圆,该圆被偏移,以便只有一部分显示在底部。我已经让它工作来显示一个偏移的圆,但它似乎只允许父视图的最大宽度/高度,而不是圆的完整大小。
例如,我有下面的代码,它显示了一个圆圈,但将大小更改为1000,我认为应该使它更大,更好地跨越屏幕底部(需要这与我们的设计相匹配),但它没有;它保留了大小:

Canvas(modifier = Modifier
    .size(516.dp)
    .offset(x = (-190).dp, y = (200).dp)
    .align(alignment = Alignment.BottomStart),
    onDraw = {
        drawCircle(color = Color.DarkGray)
    }
)

一旦我达到400 dp左右(这是我的屏幕宽度),它根本不会得到更大,当我进一步增加。有没有一种方法可以告诉它忽略父视图的大小,而只是跨越我告诉它的大小?

nuypyhwy

nuypyhwy1#

首先,如果不使用requiredXwrapContentX参数,就无法在Column、Row、Box等可组合对象中度量大小大于parnet的Composable。这就是为什么你不能创建一个宽度为516.dp的Composable,而父Composable的宽度为400.dp。
下面的代码不会让BoxWithConstraints中的Box为150.dp,而父级的大小为100.dp。

BoxWithConstraints(modifier = Modifier
        .size(100.dp)
        .border(3.dp, Color.Green)) {
        Box(modifier = Modifier
            .size(150.dp)
            .background(Color.Red))
    }

您可以查看this answer以了解更多详细信息。
第二,你的画布不需要有一个大小修饰符来绘制里面的任何东西,除非你需要sizecenter参数。在jetpack Compose中,您可以绘制Composable之外的任何内容,除非您剪辑Composable。我在这里发布了有关画布大小修改器的内容
如何使用IntrinsicSize.Min与画布在喷气背包组成
无论画布大小如何,使用设置的任何半径在画布内绘制都将绘制它

@Preview
@Composable
private fun DrawSizeTest() {
    Box(modifier = Modifier.fillMaxSize()) {
        Canvas(modifier = Modifier
            // I posted this to show that size of Canvas doesn't matter
            // If you don't need to use size or center params
            .size(0.dp)
            .offset(x = (-190).dp, y = (200).dp)
            .align(alignment = Alignment.BottomStart),
            onDraw = {
                drawCircle(color = Color.DarkGray, radius = 716.dp.toPx())
            }
        )
    }
}

相关问题