【发布时间】:2021-02-09 21:22:06
【问题描述】:
感谢Azimuth reading changes to opposite when user holds the phone upright,我希望向我们尝试这段代码 我需要使用这段代码在 Java 中进行实验,但是我不确定如何将下面的代码翻译成 Java:
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor.type != Sensor.TYPE_ROTATION_VECTOR) return
SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values)
val (matrixColumn, sense) = when (val rotation =
activity.windowManager.defaultDisplay.rotation
) {
Surface.ROTATION_0 -> Pair(0, 1)
Surface.ROTATION_90 -> Pair(1, -1)
Surface.ROTATION_180 -> Pair(0, -1)
Surface.ROTATION_270 -> Pair(1, 1)
else -> error("Invalid screen rotation value: $rotation")
}
val x = sense * rotationMatrix[matrixColumn]
val y = sense * rotationMatrix[matrixColumn + 3]
azimuthChanged(-atan2(y, x))
}
如果有人可以帮助理解并将其翻译成 Java,那将是一个很大的帮助,它看起来相当简单,但我不确定这些行的语法:
val (matrixColumn, sense) = when (val rotation =
activity.windowManager.defaultDisplay.rotation
) {
Surface.ROTATION_0 -> Pair(0, 1)
Surface.ROTATION_90 -> Pair(1, -1)
Surface.ROTATION_180 -> Pair(0, -1)
Surface.ROTATION_270 -> Pair(1, 1)
else -> error("Invalid screen rotation value: $rotation")
}
如果你能帮忙,谢谢。
【问题讨论】:
-
那不是 C 代码。
-
啊,感谢 Kotlin
-
Kotlin when的第一个谷歌搜索结果是 this, the actuald docs。声明:The when expression replaces the switch statement in C-like languages。所以……把它换成switch。
标签: java android kotlin android-sensors