对于背景元素,我试图简单地绘制一个非常大的、有偏移量的实心圆,以便只在底部显示它的一部分.我让它显示带有偏移量的圆,但它似乎只允许父视图的最大宽度/高度,而不是整个圆的大小.

例如,我有下面显示圆形的代码,但我认为将大小更改为1000左右应该会使它更大,并更好地跨越屏幕底部(需要这样做才能与我们的设计匹配),但它没有;它保留了大小:

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

一旦我达到400dp左右(大约是我屏幕的宽度),当我进一步增加时,它就不会变大了.有没有一种方法可以告诉它忽略父视图的大小,而只跨越我告诉它的大小?

推荐答案

首先,在不使用requiredXwrapContentX参数的情况下,您无法在列、行、框等可组合项中测量大小大于Parnet的可组合项.这就是为什么您不能创建宽度为516.dp的Composable,而Parent Composable的宽度为400.dp.

下面的代码不会让BoxWithConstraints中的Box为150.dp,而Parent的大小为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.我在这里发布了关于画布尺寸修饰符的帖子

How to use IntrinsicSize.Min with canvas in jetpack compose

无论画布大小是什么,在画布内以设置的任何半径绘制都会绘制它

@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())
            }
        )
    }
}

enter image description here

Android相关问答推荐

关于BLE扫描工作原理的说明

如何在Jetpack composeH中创建具有弯曲末端的六边形形状

约束布局:垂直链中的视图应将内容包裹到空间的1/3

安卓Gradle看不到dagger 柄

Android App Google AdMob";广告加载失败:3;带有测试ID,&q;广告加载失败:1 for My Gahad

使用Kotline绑定时,ViewHolder无法识别文本视图

在Android中使用Room从SQlite数据库中获取实体列表的正确方式是什么?

升级到 Jetpack Compose 物料 list 2023.08.00 需要我将 targetSdk 更改为 34

retrofit2.HttpException: HTTP 401

延时kotlin中时分秒的使用方法

通过 adb 解压并重新安装后 Android 应用程序崩溃

如何从包装在泛型中的 retrofit 调用中检索密钥?

用作输入参数的 Lambda 函数导致重组

React Native Android 应用程序在调试模式下运行良好,但当我们发布 apk 时,它会生成旧版本的应用程序

在 Jetpack Compose 中包装内容

如何在组件之间导航

插入查询室 OnConflictStrategy.REPLACE

在jetpack compose中将图像添加到脚手架顶部栏

在 Kotlin 客户端应用程序中发送 FCM 推送通知 - Firebase 云消息传递

如何授予对 Uri 图像的永久权限(androidx)