我有一个Stack小部件,其中包含一个Box和一个Image。 随着状态的变化,我想按状态具有的任何值来缩放Box小部件,例如按2x。
我找不到有关在Modifier或Box属性上缩放窗口小部件的任何信息,因此我决定通过使用对我来说不理想的“ Modifier.size”来控制大小,从而对状态变化做出反应。
那么是否支持缩放小部件?还是我应该手动使用size属性?
-谢谢
attemptLogin
答案 0 :(得分:2)
随着时间的流逝,有一个新的撰写版本,其中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)
)
}
}
我相信您可以使用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)
)
答案 1 :(得分:1)
我不想在乎盒子的大小,也不想明确保留它的引用
那将是一个问题。在Compose中,像Box()
这样的小部件是无状态函数。您无法询问Box()
的大小,而是需要使用合适的Box()
告诉 Modifier
的大小。
“代码有多大”通常是固定值或规则,由代码(例如Modifier.size(200.dp)
)设置。只要该状态是State
,您就应该能够使大小取决于您跟踪自己的状态,因此,当State
发生变化时,Compose知道进行重新组合(再次调用函数) 。如果您走这条路线,那么缩放就需要检查当前的State
值,应用缩放因子,并将结果用于新的State
值。