從 compose 1.0.1 升級到 1.3.0-beta01 后,我的可縮放影像忽略了父框尺寸 (250x250),我什至可以將它縮放到如此之大,以至于它可以到達 TopAppBar……

我沒有對代碼進行任何更改,只是簡單地升級到了最新的 compose 版本。
這是我的 ZoomRotationImage 可組合:
@Composable
private fun ZoomRotationImage(customImageUri: Uri) {
var zoom by remember { mutableStateOf(1f) }
var offset by remember { mutableStateOf(Offset.Zero) }
var angle by remember { mutableStateOf(0f) }
val imageModifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectTransformGestures(
onGesture = { gestureCentroid, gesturePan, gestureZoom, gestureRotate ->
val oldScale = zoom
val newScale = zoom * gestureZoom
offset = (offset gestureCentroid / oldScale).rotateBy(gestureRotate) -
(gestureCentroid / newScale gesturePan / oldScale)
zoom = newScale.coerceIn(0.5f..5f)
angle = gestureRotate
}
)
}
.graphicsLayer {
translationX = -offset.x * zoom
translationY = -offset.y * zoom
scaleX = zoom
scaleY = zoom
rotationZ = angle
TransformOrigin(0f, 0f).also { transformOrigin = it }
}
//GlideImage(customImageUri, modifier = imageModifier, contentScale = ContentScale.Fit)
AsyncImage(model = customImageUri, contentDescription ="", modifier = imageModifier, contentScale = ContentScale.Fit)
}
這里是盒子:
Box(
modifier = Modifier
.height(250.dp)
.width(250.dp)
) {
ZoomRotationImage(screenState.customImageURI)
}
uj5u.com熱心網友回復:
如果您不呼叫Modifier.clipToBounds(), Modifier.clip() 之前的 Modifier.graphicsLayer{} 或在Modifier.graphicsLayer{}您的 Composable 的轉換中呼叫 clip = true 將不會被限制在其范圍內。繪制到 Canvas 或使用Modifier.drawX修飾符也是如此。
uj5u.com熱心網友回復:
用于Modifier.clipToBounds()限制您的轉換以限制其父級的范圍
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/505667.html
標籤:安卓 科特林 android-jetpack-compose 机器人喷气背包
上一篇:如何在RxJava中將多個observables放在一個observable中?
下一篇:代替?用/在重寫規則中
