diff --git a/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt b/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt index 1464087..fbbccf0 100644 --- a/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt +++ b/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt @@ -62,7 +62,7 @@ private val locationTool by lazy { LocationTool(this) } private val markerPoints by lazy { ArrayList() } private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] } - private val sensorManager by lazy { getSystemService()!! } + private val sensorManager by lazy { getSystemService() } private val attr = AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build() private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build() @@ -444,17 +444,17 @@ override fun onResume() { super.onResume() //注册加速度传感器监听 - val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) - sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL) + val accelerometer = sensorManager?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) + sensorManager?.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL) //注册磁场传感器监听 - val magnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) - sensorManager.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL) + val magnetic = sensorManager?.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) + sensorManager?.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL) } override fun onPause() { super.onPause() - sensorManager.unregisterListener(this) + sensorManager?.unregisterListener(this) } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { diff --git a/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt b/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt index 1464087..fbbccf0 100644 --- a/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt +++ b/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt @@ -62,7 +62,7 @@ private val locationTool by lazy { LocationTool(this) } private val markerPoints by lazy { ArrayList() } private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] } - private val sensorManager by lazy { getSystemService()!! } + private val sensorManager by lazy { getSystemService() } private val attr = AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build() private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build() @@ -444,17 +444,17 @@ override fun onResume() { super.onResume() //注册加速度传感器监听 - val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) - sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL) + val accelerometer = sensorManager?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) + sensorManager?.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL) //注册磁场传感器监听 - val magnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) - sensorManager.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL) + val magnetic = sensorManager?.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) + sensorManager?.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL) } override fun onPause() { super.onPause() - sensorManager.unregisterListener(this) + sensorManager?.unregisterListener(this) } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { diff --git a/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt b/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt index 1d5588f..fc4ef74 100644 --- a/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt +++ b/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt @@ -1,5 +1,6 @@ package com.casic.detector.common.widgets +import android.annotation.SuppressLint import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory @@ -67,6 +68,7 @@ private lateinit var tickPaint: Paint private lateinit var backPaint: Paint + private lateinit var needlePaint: Paint private lateinit var borderPaint: Paint private lateinit var shaderPaint: Paint private lateinit var dataPaint: Paint @@ -80,12 +82,18 @@ //背景栅格图 private lateinit var bitmap: Bitmap + //针 + private lateinit var needleBitmap: Bitmap + //雷达旋转矩阵 private lateinit var matrix: Matrix //背景区域范围 private var bgRect: Rect + //针区域范围 + private var needleRect: Rect + //刻度长度 private val tickLength = 15f.dp2px(context) @@ -108,6 +116,9 @@ bgRect = Rect(-radius, -radius, radius, radius) + val needleRectRadius = (radius * 0.75).toInt() + needleRect = Rect(-needleRectRadius, -needleRectRadius, needleRectRadius, needleRectRadius) + initPaint() //控制转动 @@ -140,6 +151,11 @@ backPaint.isAntiAlias = true bitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.bg_radar) + needlePaint = Paint() + needlePaint.isAntiAlias = true + //针 + needleBitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.needle) + borderPaint = Paint() borderPaint.color = borderColor borderPaint.style = Paint.Style.STROKE @@ -216,6 +232,7 @@ setMeasuredDimension(mWidth, mHeight) } + @SuppressLint("DrawAllocation") override fun onDraw(canvas: Canvas) { super.onDraw(canvas) /** @@ -232,7 +249,7 @@ //每道同心圆的半径差 var tempR = radius val deltaR = tempR / circleCount - for (i in 0..circleCount) { + for (i in 0 until circleCount) { canvas.drawCircle(0f, 0f, tempR.toFloat(), borderPaint) tempR -= deltaR } @@ -333,6 +350,16 @@ } } + val needleMatrix = Matrix() + needleMatrix.postRotate(degreeValue.toFloat()) + val bmp = Bitmap.createBitmap( + needleBitmap, + 0, 0, + needleBitmap.width, needleBitmap.height, + needleMatrix, true + ) + canvas.drawBitmap(bmp, null, needleRect, needlePaint) + //画数据点 points?.forEach { canvas.drawCircle(it.x, it.y, 10f, dataPaint) diff --git a/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt b/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt index 1464087..fbbccf0 100644 --- a/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt +++ b/app/src/main/java/com/casic/detector/common/view/SearchMarkerActivity.kt @@ -62,7 +62,7 @@ private val locationTool by lazy { LocationTool(this) } private val markerPoints by lazy { ArrayList() } private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] } - private val sensorManager by lazy { getSystemService()!! } + private val sensorManager by lazy { getSystemService() } private val attr = AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build() private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build() @@ -444,17 +444,17 @@ override fun onResume() { super.onResume() //注册加速度传感器监听 - val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) - sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL) + val accelerometer = sensorManager?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) + sensorManager?.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL) //注册磁场传感器监听 - val magnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) - sensorManager.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL) + val magnetic = sensorManager?.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) + sensorManager?.registerListener(this, magnetic, SensorManager.SENSOR_DELAY_NORMAL) } override fun onPause() { super.onPause() - sensorManager.unregisterListener(this) + sensorManager?.unregisterListener(this) } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { diff --git a/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt b/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt index 1d5588f..fc4ef74 100644 --- a/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt +++ b/app/src/main/java/com/casic/detector/common/widgets/RadarScanView.kt @@ -1,5 +1,6 @@ package com.casic.detector.common.widgets +import android.annotation.SuppressLint import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory @@ -67,6 +68,7 @@ private lateinit var tickPaint: Paint private lateinit var backPaint: Paint + private lateinit var needlePaint: Paint private lateinit var borderPaint: Paint private lateinit var shaderPaint: Paint private lateinit var dataPaint: Paint @@ -80,12 +82,18 @@ //背景栅格图 private lateinit var bitmap: Bitmap + //针 + private lateinit var needleBitmap: Bitmap + //雷达旋转矩阵 private lateinit var matrix: Matrix //背景区域范围 private var bgRect: Rect + //针区域范围 + private var needleRect: Rect + //刻度长度 private val tickLength = 15f.dp2px(context) @@ -108,6 +116,9 @@ bgRect = Rect(-radius, -radius, radius, radius) + val needleRectRadius = (radius * 0.75).toInt() + needleRect = Rect(-needleRectRadius, -needleRectRadius, needleRectRadius, needleRectRadius) + initPaint() //控制转动 @@ -140,6 +151,11 @@ backPaint.isAntiAlias = true bitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.bg_radar) + needlePaint = Paint() + needlePaint.isAntiAlias = true + //针 + needleBitmap = BitmapFactory.decodeResource(context.resources, R.mipmap.needle) + borderPaint = Paint() borderPaint.color = borderColor borderPaint.style = Paint.Style.STROKE @@ -216,6 +232,7 @@ setMeasuredDimension(mWidth, mHeight) } + @SuppressLint("DrawAllocation") override fun onDraw(canvas: Canvas) { super.onDraw(canvas) /** @@ -232,7 +249,7 @@ //每道同心圆的半径差 var tempR = radius val deltaR = tempR / circleCount - for (i in 0..circleCount) { + for (i in 0 until circleCount) { canvas.drawCircle(0f, 0f, tempR.toFloat(), borderPaint) tempR -= deltaR } @@ -333,6 +350,16 @@ } } + val needleMatrix = Matrix() + needleMatrix.postRotate(degreeValue.toFloat()) + val bmp = Bitmap.createBitmap( + needleBitmap, + 0, 0, + needleBitmap.width, needleBitmap.height, + needleMatrix, true + ) + canvas.drawBitmap(bmp, null, needleRect, needlePaint) + //画数据点 points?.forEach { canvas.drawCircle(it.x, it.y, 10f, dataPaint) diff --git a/app/src/main/res/mipmap-xhdpi/needle.png b/app/src/main/res/mipmap-xhdpi/needle.png new file mode 100644 index 0000000..c2d3593 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/needle.png Binary files differ