如何解决是否可以“缩放” Jetpack组成的任何小部件的宽度和高度? 撰写1.0.0-alpha08 撰写1.0.0-alpha07原始答案
我有一个Stack小部件,其中包含一个Box和一个Image。 随着状态的变化,我想按状态具有的任何值来缩放Box小部件,例如按2x。
我找不到有关在Modifier或Box属性上缩放窗口小部件的任何信息,因此我决定通过使用对我来说不理想的“ Modifier.size”来控制大小,从而对状态变化做出反应。
那么是否支持缩放小部件?还是我应该手动使用size属性?
-谢谢
attemptLogin
解决方法
撰写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)
)
,
我不想在乎盒子的大小,也不想明确保留它的引用
那将是一个问题。在Compose中,像Box()
这样的小部件是无状态函数。您无法询问Box()
的大小,而是需要使用合适的Box()
告诉 Modifier
的大小。
“代码有多大”通常是固定值或规则,由代码(例如Modifier.size(200.dp)
)设置。只要该状态是State
,您就应该能够使大小取决于您跟踪自己的状态,因此,当State
发生变化时,Compose知道进行重新组合(再次调用函数) 。如果您走这条路线,那么缩放就需要检查当前的State
值,应用缩放因子,并将结果用于新的State
值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。