假设我的撰写屏幕上有以下画布:
Canvas(modifier = Modifier.fillMaxSize()) {
withTransform(
{
transform(matrix = SOME_TRANSFORMATION_MATRIX_HERE)
}
) {
withTransform(
{
transform(matrix = SOME_OTHER_TRANSFORMATION_MATRIX_HERE)
}
) {
// How to know the current canvas'
// - translation;
// - rotation, and;
// - scale?
}
}
}
是否可以通过
DrawScope
知道这些变换?如果可以的话,怎样才能做到呢?
要在 Jetpack Compose 中访问转换矩阵及其组件,您通常需要实现自己的转换逻辑并维护可组合函数中的状态。
以下是如何在 Compose 中维护和访问转换状态的修订示例:
@Composable
fun MyCanvas() {
var translationX by remember { mutableStateOf(0f) }
var translationY by remember { mutableStateOf(0f) }
var rotationDegrees by remember { mutableStateOf(0f) }
var scaleX by remember { mutableStateOf(1f) }
var scaleY by remember { mutableStateOf(1f) }
Canvas(modifier = Modifier.fillMaxSize()) {
withTransform({
// Apply transformations here
translate(left = translationX, top = translationY)
rotate(degrees = rotationDegrees)
scale(scaleX, scaleY)
}) {
// Drawing code
// Update transformation values as needed
translationX = 100f
translationY = 50f
rotationDegrees = 45f
scaleX = 1.5f
scaleY = 1.5f
// Now, you can access the current transformation values
val currentTranslationX = translationX
val currentTranslationY = translationY
val currentRotationDegrees = rotationDegrees
val currentScaleX = scaleX
val currentScaleY = scaleY
}
}
}
在这种方法中,我们将转换属性维护为可变状态变量,当您想要更新它们时,可以在 Composable 函数中执行此操作。这将允许您将转换应用于
Canvas
并访问其当前值。
Jetpack Compose 不提供对
Canvas
或 DrawScope
的转换状态的直接访问,因此您需要自己处理状态。