diff --git a/app/build.gradle b/app/build.gradle index 219ce47..806ba8a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ applicationId "com.casic.detector" minSdkVersion 22 targetSdkVersion 33 - versionCode 5020 - versionName "5.0.2" + versionCode 5030 + versionName "5.0.3" ndk { moduleName "serial_port" diff --git a/app/build.gradle b/app/build.gradle index 219ce47..806ba8a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ applicationId "com.casic.detector" minSdkVersion 22 targetSdkVersion 33 - versionCode 5020 - versionName "5.0.2" + versionCode 5030 + versionName "5.0.3" ndk { moduleName "serial_port" diff --git a/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt b/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt index ff268ad..abbacd9 100644 --- a/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt +++ b/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt @@ -15,7 +15,6 @@ import android.graphics.Typeface import android.text.TextPaint import android.util.AttributeSet -import android.util.Log import android.view.View import com.casic.detector.R import com.pengxh.kt.lite.extensions.dp2px @@ -50,6 +49,9 @@ //需要渲染的数据点集合 private var points: ArrayList? = null + //距离最近的点 + private var targetPoint: PointF? = null + //View中心X坐标 private var centerX = 0f @@ -328,6 +330,11 @@ canvas.drawCircle(it.x, it.y, 8f, dataPaint) } + //画最近的点最外层圆环 + targetPoint?.apply { + canvas.drawCircle(x, y, 10f, borderPaint) + } + /** * 上下翻转画布,否则矩阵旋转是逆时针,因为手机等设备Y轴和生活中的坐标轴Y轴是反的 * */ @@ -355,42 +362,36 @@ fun renderPointData(dataPoints: ArrayList) { points = ArrayList() dataPoints.forEach { - Log.d(kTag, "renderPointData => [${it.angle}, ${it.distance}]") - //转为弧度 - val dataAngle = (it.angle * Math.PI / 180).toFloat() - - //距离最大3米,表盘最大125dp,需要转换 - //TODO 距离转换有问题 - val d = (it.distance / 3) * 125 - val dataDistance = recursionDistance(d.dp2px(context)) - - //计算实际圆心坐标 - val x = dataDistance * cos(dataAngle) - val y = dataDistance * sin(dataAngle) - - points?.add(PointF(x, y)) + points?.add(it.convertPointF()) } + + //计算出附近最近的点 + dataPoints.sortBy(DataPoint::distance) + + //在最近的点外侧绘制同心圆 + targetPoint = dataPoints.first().convertPointF() + //实时刷新点位数据 invalidate() } /** + * dataPoint转为PointF + * */ + private fun DataPoint.convertPointF(): PointF { + val dataAngle = (this.angle * Math.PI / 180).toFloat() + //距离最大3米,表盘最大125dp,需要转换 + //TODO 距离转换有点问题 + val dataDistance = this.distance * (30 / 125f) + val x = dataDistance * cos(dataAngle) + val y = dataDistance * sin(dataAngle) + return PointF(x, y) + } + + /** * 数据点 * @param angle 数据点和圆心的方位角 * @param distance 数据点和圆心的相对距离 * */ data class DataPoint(val angle: Int, val distance: Int) - - /** - * 递归计算周期性距离 - * */ - private fun recursionDistance(distance: Int): Int { - return if (distance <= 0) { - 0 - } else if (distance >= radius) { - radius - } else { - distance - } - } } \ No newline at end of file