[英]Translate Kotlin code into Java - Understanding the Syntax
我正在嘗試向我們嘗試這段代碼,這要歸功於當用戶直立手機時方位角讀數會發生變化
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")
}
謝謝,如果你能幫忙。
這是使用解構聲明,這在 Java 中不可用,因此您必須聲明兩個變量,然后在switch
語句中分配它們,這類似於 Kotlin when
語句。
int matrixColumn;
int sense;
switch(getActivity().getWindowManager().getDefaultDisplay.getRotation()) {
case Surface.ROTATION_0:
matrixColumn = 0;
sense = 1;
break;
case Surface.ROTATION_90:
matrixColumn = 1;
sense = -1;
break;
case Surface.ROTATION_180:
matrixColumn = 0;
sense = -1;
break;
default: // Surface.ROTATION_270:
matrixColumn = 1;
sense = 1;
break;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.