android - Jetpack compose 中的任何小部件是否可以 "Scale"宽度和高度?

标签 android android-jetpack android-jetpack-compose

我有一个 Stack 小部件,它承载一个 Box 和一个 Image。
随着状态的变化,我想通过状态具有的任何值来缩放 Box 小部件,例如 2 倍。
我找不到任何关于在 Modifier 或 Box 属性上缩放小部件的信息,所以我决定通过使用“Modifier.size”来操纵大小来对状态变化使用react,这对我来说并不理想。
那么是否支持缩放小部件或者我应该手动使用 size 属性?
-谢谢

@Composable
fun Pointer(modifier: Modifier = Modifier, state: TransitionState, onClick: () -> Unit) {
    Stack(modifier) {
        Box(
            shape = CircleShape, backgroundColor = Color.Gray.copy(alpha = .3f),
            modifier = Modifier.size(state[width])
        )
        Image(
            asset = imageResource(id = R.drawable.ic_pointer),
            modifier = Modifier
                .clickable(onClick = onClick)
        )
    }
}

最佳答案

编写 1.0.0-alpha08
随着时间的流逝,有一个新的撰写版本renames 'drawLayer' 到 'graphicsLayer' 并添加一个新的 scale修饰符(在下面使用“graphicsLayer”)。
因此可组合将如下所示:

@Composable
fun Pointer(scale: Float, modifier: Modifier = Modifier) {
    Box(modifier) {
        Box(
            modifier = Modifier
                .matchParentSize()
                .scale(scale)
                .background(Color.Cyan, CircleShape)
        )
        Image(
            imageVector = Icons.Filled.Done,
            modifier = Modifier
                .align(Alignment.Center)
        )
    }
}
撰写 1.0.0-alpha07 (原始答案)
我相信您可以通过 drawLayer 实现所需的行为。修饰符。例如一个简单的可组合,它显示一个可缩放的圆圈和一个不可缩放的图标:
@Composable
fun Pointer(scale: Float, modifier: Modifier = Modifier) {
    Box(modifier) {
        Box(
            modifier = Modifier
                .matchParentSize()
                .drawLayer(scaleX = scale, scaleY = scale)
                .background(Color.Cyan, CircleShape)
        )
        Image(
            asset = Icons.Filled.Done,
            modifier = Modifier
                .align(Alignment.Center)
        )
    }
}
和用法:
Pointer(
    scale = 1f,
    modifier = Modifier
        .background(Color.Magenta)
        .padding(25.dp)
        .preferredSize(50.dp)
        .align(Alignment.CenterHorizontally)
)
When scale = 1f
When scale = 2f

关于android - Jetpack compose 中的任何小部件是否可以 "Scale"宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64093306/

相关文章:

android - 我可以在保留私钥的同时更改 Android 签名证书主题吗

android - 立即将所有新文件添加到 Android Studio 中的 VCS

android - 使用导航架构组件时出现错误的动画

android - 如何使用jetpack compose删除卡片 View 的边框

kotlin - 如何在非Android项目中设置Kotlin编译器的版本?

android - 偏好是否在更新中保持不变

javascript - Android 的错误代码 : 500 on react native 0. 56

java - 底页 + Android MotionLayout 实现

android - Jetpack compose 中如何让懒惰的列项占据整个高度?

android - 与 .apply 一起使用时,修饰符不起作用