diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 8c5a880..0dc3d5d 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -3,6 +3,7 @@ import android.app.ProgressDialog import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -20,13 +21,10 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.* import com.casic.detector.BuildConfig import com.casic.detector.R import com.casic.detector.bean.LabelBean -import com.casic.detector.bean.TaskBean import com.casic.detector.callback.ILocationListener import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay @@ -78,7 +76,6 @@ private var longitude: Double = 0.0 private val powerManager by lazy { getSystemService() } private var wakeLock: PowerManager.WakeLock? = null - private var taskBean: TaskBean? = null private val gson by lazy { Gson() } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,6 +109,8 @@ //显示定位小蓝点 locationStyle = MyLocationStyle() locationStyle.interval(2000) + locationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)) + locationStyle.strokeColor(Color.argb(0, 0, 0, 0)) locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。 aMap.myLocationStyle = locationStyle//设置定位蓝点的Style aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点 @@ -269,36 +268,46 @@ clusterOverlay = ClusterOverlay(context, aMap, clusterItems, regionRadius) clusterOverlay?.setClusterRender { clusterNum -> val radius = 80f.dp2px(context) - if (clusterNum == 1) { - var bitmapDrawable: Drawable? = backDrawables[1] - if (bitmapDrawable == null) { - bitmapDrawable = resources.getDrawable(R.mipmap.label_location) - backDrawables[1] = bitmapDrawable - } - bitmapDrawable!! - } else if (clusterNum < 5) { - var bitmapDrawable: Drawable? = backDrawables[2] + if (clusterNum == 0) { + var bitmapDrawable = backDrawables[0] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(159, 210, 154, 6)) + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) + ) + backDrawables[0] = bitmapDrawable + } + bitmapDrawable + } + if (clusterNum == 1) { + var bitmapDrawable = backDrawables[1] + if (bitmapDrawable == null) { + bitmapDrawable = resources.getDrawable(R.mipmap.label) + backDrawables[1] = bitmapDrawable + } + bitmapDrawable + } else if (clusterNum < 5) { + var bitmapDrawable = backDrawables[2] + if (bitmapDrawable == null) { + bitmapDrawable = BitmapDrawable( + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) ) backDrawables[2] = bitmapDrawable } bitmapDrawable } else if (clusterNum < 10) { - var bitmapDrawable: Drawable? = backDrawables[3] + var bitmapDrawable = backDrawables[3] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(199, 217, 114, 0)) + null, radius.drawCircle(Color.argb(199, 30, 144, 255)) ) backDrawables[3] = bitmapDrawable } bitmapDrawable } else { - var bitmapDrawable: Drawable? = backDrawables[4] + var bitmapDrawable = backDrawables[4] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(235, 215, 66, 2)) + null, radius.drawCircle(Color.argb(235, 65, 105, 225)) ) backDrawables[4] = bitmapDrawable } @@ -415,8 +424,7 @@ .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - taskBean = task[position] - + val taskBean = task[position] AlertControlDialog.Builder() .setContext(context) .setTitle("提示") @@ -426,11 +434,19 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - uploadTask(taskBean?.taskId, "1") + detectRedrawGraphic(taskBean.taskId) + aMap.moveCamera( + CameraUpdateFactory.newLatLngZoom( + LatLng( + taskBean.lat.toDouble(), taskBean.lng.toDouble() + ), 15f + ) + ) + uploadTask(taskBean.taskId, "1") } override fun onCancelClick() { - uploadTask(taskBean?.taskId, "2") + uploadTask(taskBean.taskId, "2") } }).build().show() } @@ -456,6 +472,33 @@ } } + private fun detectRedrawGraphic(taskId: String) { + val tasks = DataBaseManager.get.queryTaskById(taskId) + if (tasks.isNotEmpty()) { + tasks.forEach { + val latLng = LatLng(it.lat.toDouble(), it.lng.toDouble()) + val otMarkerOptions = MarkerOptions() + otMarkerOptions.position(latLng) + otMarkerOptions.visible(true) // 设置可见 + if (it.state == "未开始") { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_red1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } else { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_blue1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } + aMap.addMarker(otMarkerOptions) + } + } + showLabelsOnMap() + } + private fun uploadTask(taskId: String?, state: String) { if (isNetworkConnected()) { val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String @@ -527,7 +570,7 @@ } } - //事件上报 + //TODO 事件上报 private fun uploadEvent() { if (latitude != 0.0 && longitude != 0.0) { if (true) { diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 8c5a880..0dc3d5d 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -3,6 +3,7 @@ import android.app.ProgressDialog import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -20,13 +21,10 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.* import com.casic.detector.BuildConfig import com.casic.detector.R import com.casic.detector.bean.LabelBean -import com.casic.detector.bean.TaskBean import com.casic.detector.callback.ILocationListener import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay @@ -78,7 +76,6 @@ private var longitude: Double = 0.0 private val powerManager by lazy { getSystemService() } private var wakeLock: PowerManager.WakeLock? = null - private var taskBean: TaskBean? = null private val gson by lazy { Gson() } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,6 +109,8 @@ //显示定位小蓝点 locationStyle = MyLocationStyle() locationStyle.interval(2000) + locationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)) + locationStyle.strokeColor(Color.argb(0, 0, 0, 0)) locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。 aMap.myLocationStyle = locationStyle//设置定位蓝点的Style aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点 @@ -269,36 +268,46 @@ clusterOverlay = ClusterOverlay(context, aMap, clusterItems, regionRadius) clusterOverlay?.setClusterRender { clusterNum -> val radius = 80f.dp2px(context) - if (clusterNum == 1) { - var bitmapDrawable: Drawable? = backDrawables[1] - if (bitmapDrawable == null) { - bitmapDrawable = resources.getDrawable(R.mipmap.label_location) - backDrawables[1] = bitmapDrawable - } - bitmapDrawable!! - } else if (clusterNum < 5) { - var bitmapDrawable: Drawable? = backDrawables[2] + if (clusterNum == 0) { + var bitmapDrawable = backDrawables[0] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(159, 210, 154, 6)) + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) + ) + backDrawables[0] = bitmapDrawable + } + bitmapDrawable + } + if (clusterNum == 1) { + var bitmapDrawable = backDrawables[1] + if (bitmapDrawable == null) { + bitmapDrawable = resources.getDrawable(R.mipmap.label) + backDrawables[1] = bitmapDrawable + } + bitmapDrawable + } else if (clusterNum < 5) { + var bitmapDrawable = backDrawables[2] + if (bitmapDrawable == null) { + bitmapDrawable = BitmapDrawable( + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) ) backDrawables[2] = bitmapDrawable } bitmapDrawable } else if (clusterNum < 10) { - var bitmapDrawable: Drawable? = backDrawables[3] + var bitmapDrawable = backDrawables[3] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(199, 217, 114, 0)) + null, radius.drawCircle(Color.argb(199, 30, 144, 255)) ) backDrawables[3] = bitmapDrawable } bitmapDrawable } else { - var bitmapDrawable: Drawable? = backDrawables[4] + var bitmapDrawable = backDrawables[4] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(235, 215, 66, 2)) + null, radius.drawCircle(Color.argb(235, 65, 105, 225)) ) backDrawables[4] = bitmapDrawable } @@ -415,8 +424,7 @@ .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - taskBean = task[position] - + val taskBean = task[position] AlertControlDialog.Builder() .setContext(context) .setTitle("提示") @@ -426,11 +434,19 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - uploadTask(taskBean?.taskId, "1") + detectRedrawGraphic(taskBean.taskId) + aMap.moveCamera( + CameraUpdateFactory.newLatLngZoom( + LatLng( + taskBean.lat.toDouble(), taskBean.lng.toDouble() + ), 15f + ) + ) + uploadTask(taskBean.taskId, "1") } override fun onCancelClick() { - uploadTask(taskBean?.taskId, "2") + uploadTask(taskBean.taskId, "2") } }).build().show() } @@ -456,6 +472,33 @@ } } + private fun detectRedrawGraphic(taskId: String) { + val tasks = DataBaseManager.get.queryTaskById(taskId) + if (tasks.isNotEmpty()) { + tasks.forEach { + val latLng = LatLng(it.lat.toDouble(), it.lng.toDouble()) + val otMarkerOptions = MarkerOptions() + otMarkerOptions.position(latLng) + otMarkerOptions.visible(true) // 设置可见 + if (it.state == "未开始") { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_red1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } else { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_blue1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } + aMap.addMarker(otMarkerOptions) + } + } + showLabelsOnMap() + } + private fun uploadTask(taskId: String?, state: String) { if (isNetworkConnected()) { val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String @@ -527,7 +570,7 @@ } } - //事件上报 + //TODO 事件上报 private fun uploadEvent() { if (latitude != 0.0 && longitude != 0.0) { if (true) { diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index e22fef1..b0b56c5 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -138,8 +138,11 @@ val response = RetrofitServiceManager.uploadTask(userId, taskId, state) if (response.separateResponseState()) { loadState.value = LoadState.Success - //删除本地数据库 - DataBaseManager.get.deleteTaskById(taskId) + if (state == "2") { + "工单${taskId}已提交!".show(BaseApplication.get()) + //删除本地数据库 + DataBaseManager.get.deleteTaskById(taskId) + } } else { loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 8c5a880..0dc3d5d 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -3,6 +3,7 @@ import android.app.ProgressDialog import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -20,13 +21,10 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.* import com.casic.detector.BuildConfig import com.casic.detector.R import com.casic.detector.bean.LabelBean -import com.casic.detector.bean.TaskBean import com.casic.detector.callback.ILocationListener import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay @@ -78,7 +76,6 @@ private var longitude: Double = 0.0 private val powerManager by lazy { getSystemService() } private var wakeLock: PowerManager.WakeLock? = null - private var taskBean: TaskBean? = null private val gson by lazy { Gson() } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,6 +109,8 @@ //显示定位小蓝点 locationStyle = MyLocationStyle() locationStyle.interval(2000) + locationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)) + locationStyle.strokeColor(Color.argb(0, 0, 0, 0)) locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。 aMap.myLocationStyle = locationStyle//设置定位蓝点的Style aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点 @@ -269,36 +268,46 @@ clusterOverlay = ClusterOverlay(context, aMap, clusterItems, regionRadius) clusterOverlay?.setClusterRender { clusterNum -> val radius = 80f.dp2px(context) - if (clusterNum == 1) { - var bitmapDrawable: Drawable? = backDrawables[1] - if (bitmapDrawable == null) { - bitmapDrawable = resources.getDrawable(R.mipmap.label_location) - backDrawables[1] = bitmapDrawable - } - bitmapDrawable!! - } else if (clusterNum < 5) { - var bitmapDrawable: Drawable? = backDrawables[2] + if (clusterNum == 0) { + var bitmapDrawable = backDrawables[0] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(159, 210, 154, 6)) + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) + ) + backDrawables[0] = bitmapDrawable + } + bitmapDrawable + } + if (clusterNum == 1) { + var bitmapDrawable = backDrawables[1] + if (bitmapDrawable == null) { + bitmapDrawable = resources.getDrawable(R.mipmap.label) + backDrawables[1] = bitmapDrawable + } + bitmapDrawable + } else if (clusterNum < 5) { + var bitmapDrawable = backDrawables[2] + if (bitmapDrawable == null) { + bitmapDrawable = BitmapDrawable( + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) ) backDrawables[2] = bitmapDrawable } bitmapDrawable } else if (clusterNum < 10) { - var bitmapDrawable: Drawable? = backDrawables[3] + var bitmapDrawable = backDrawables[3] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(199, 217, 114, 0)) + null, radius.drawCircle(Color.argb(199, 30, 144, 255)) ) backDrawables[3] = bitmapDrawable } bitmapDrawable } else { - var bitmapDrawable: Drawable? = backDrawables[4] + var bitmapDrawable = backDrawables[4] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(235, 215, 66, 2)) + null, radius.drawCircle(Color.argb(235, 65, 105, 225)) ) backDrawables[4] = bitmapDrawable } @@ -415,8 +424,7 @@ .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - taskBean = task[position] - + val taskBean = task[position] AlertControlDialog.Builder() .setContext(context) .setTitle("提示") @@ -426,11 +434,19 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - uploadTask(taskBean?.taskId, "1") + detectRedrawGraphic(taskBean.taskId) + aMap.moveCamera( + CameraUpdateFactory.newLatLngZoom( + LatLng( + taskBean.lat.toDouble(), taskBean.lng.toDouble() + ), 15f + ) + ) + uploadTask(taskBean.taskId, "1") } override fun onCancelClick() { - uploadTask(taskBean?.taskId, "2") + uploadTask(taskBean.taskId, "2") } }).build().show() } @@ -456,6 +472,33 @@ } } + private fun detectRedrawGraphic(taskId: String) { + val tasks = DataBaseManager.get.queryTaskById(taskId) + if (tasks.isNotEmpty()) { + tasks.forEach { + val latLng = LatLng(it.lat.toDouble(), it.lng.toDouble()) + val otMarkerOptions = MarkerOptions() + otMarkerOptions.position(latLng) + otMarkerOptions.visible(true) // 设置可见 + if (it.state == "未开始") { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_red1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } else { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_blue1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } + aMap.addMarker(otMarkerOptions) + } + } + showLabelsOnMap() + } + private fun uploadTask(taskId: String?, state: String) { if (isNetworkConnected()) { val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String @@ -527,7 +570,7 @@ } } - //事件上报 + //TODO 事件上报 private fun uploadEvent() { if (latitude != 0.0 && longitude != 0.0) { if (true) { diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index e22fef1..b0b56c5 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -138,8 +138,11 @@ val response = RetrofitServiceManager.uploadTask(userId, taskId, state) if (response.separateResponseState()) { loadState.value = LoadState.Success - //删除本地数据库 - DataBaseManager.get.deleteTaskById(taskId) + if (state == "2") { + "工单${taskId}已提交!".show(BaseApplication.get()) + //删除本地数据库 + DataBaseManager.get.deleteTaskById(taskId) + } } else { loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) diff --git a/app/src/main/res/mipmap-xhdpi/defaultcluster.png b/app/src/main/res/mipmap-xhdpi/defaultcluster.png new file mode 100644 index 0000000..7060775 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/defaultcluster.png Binary files differ diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 8c5a880..0dc3d5d 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -3,6 +3,7 @@ import android.app.ProgressDialog import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -20,13 +21,10 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.* import com.casic.detector.BuildConfig import com.casic.detector.R import com.casic.detector.bean.LabelBean -import com.casic.detector.bean.TaskBean import com.casic.detector.callback.ILocationListener import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay @@ -78,7 +76,6 @@ private var longitude: Double = 0.0 private val powerManager by lazy { getSystemService() } private var wakeLock: PowerManager.WakeLock? = null - private var taskBean: TaskBean? = null private val gson by lazy { Gson() } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,6 +109,8 @@ //显示定位小蓝点 locationStyle = MyLocationStyle() locationStyle.interval(2000) + locationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)) + locationStyle.strokeColor(Color.argb(0, 0, 0, 0)) locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。 aMap.myLocationStyle = locationStyle//设置定位蓝点的Style aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点 @@ -269,36 +268,46 @@ clusterOverlay = ClusterOverlay(context, aMap, clusterItems, regionRadius) clusterOverlay?.setClusterRender { clusterNum -> val radius = 80f.dp2px(context) - if (clusterNum == 1) { - var bitmapDrawable: Drawable? = backDrawables[1] - if (bitmapDrawable == null) { - bitmapDrawable = resources.getDrawable(R.mipmap.label_location) - backDrawables[1] = bitmapDrawable - } - bitmapDrawable!! - } else if (clusterNum < 5) { - var bitmapDrawable: Drawable? = backDrawables[2] + if (clusterNum == 0) { + var bitmapDrawable = backDrawables[0] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(159, 210, 154, 6)) + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) + ) + backDrawables[0] = bitmapDrawable + } + bitmapDrawable + } + if (clusterNum == 1) { + var bitmapDrawable = backDrawables[1] + if (bitmapDrawable == null) { + bitmapDrawable = resources.getDrawable(R.mipmap.label) + backDrawables[1] = bitmapDrawable + } + bitmapDrawable + } else if (clusterNum < 5) { + var bitmapDrawable = backDrawables[2] + if (bitmapDrawable == null) { + bitmapDrawable = BitmapDrawable( + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) ) backDrawables[2] = bitmapDrawable } bitmapDrawable } else if (clusterNum < 10) { - var bitmapDrawable: Drawable? = backDrawables[3] + var bitmapDrawable = backDrawables[3] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(199, 217, 114, 0)) + null, radius.drawCircle(Color.argb(199, 30, 144, 255)) ) backDrawables[3] = bitmapDrawable } bitmapDrawable } else { - var bitmapDrawable: Drawable? = backDrawables[4] + var bitmapDrawable = backDrawables[4] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(235, 215, 66, 2)) + null, radius.drawCircle(Color.argb(235, 65, 105, 225)) ) backDrawables[4] = bitmapDrawable } @@ -415,8 +424,7 @@ .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - taskBean = task[position] - + val taskBean = task[position] AlertControlDialog.Builder() .setContext(context) .setTitle("提示") @@ -426,11 +434,19 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - uploadTask(taskBean?.taskId, "1") + detectRedrawGraphic(taskBean.taskId) + aMap.moveCamera( + CameraUpdateFactory.newLatLngZoom( + LatLng( + taskBean.lat.toDouble(), taskBean.lng.toDouble() + ), 15f + ) + ) + uploadTask(taskBean.taskId, "1") } override fun onCancelClick() { - uploadTask(taskBean?.taskId, "2") + uploadTask(taskBean.taskId, "2") } }).build().show() } @@ -456,6 +472,33 @@ } } + private fun detectRedrawGraphic(taskId: String) { + val tasks = DataBaseManager.get.queryTaskById(taskId) + if (tasks.isNotEmpty()) { + tasks.forEach { + val latLng = LatLng(it.lat.toDouble(), it.lng.toDouble()) + val otMarkerOptions = MarkerOptions() + otMarkerOptions.position(latLng) + otMarkerOptions.visible(true) // 设置可见 + if (it.state == "未开始") { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_red1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } else { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_blue1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } + aMap.addMarker(otMarkerOptions) + } + } + showLabelsOnMap() + } + private fun uploadTask(taskId: String?, state: String) { if (isNetworkConnected()) { val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String @@ -527,7 +570,7 @@ } } - //事件上报 + //TODO 事件上报 private fun uploadEvent() { if (latitude != 0.0 && longitude != 0.0) { if (true) { diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index e22fef1..b0b56c5 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -138,8 +138,11 @@ val response = RetrofitServiceManager.uploadTask(userId, taskId, state) if (response.separateResponseState()) { loadState.value = LoadState.Success - //删除本地数据库 - DataBaseManager.get.deleteTaskById(taskId) + if (state == "2") { + "工单${taskId}已提交!".show(BaseApplication.get()) + //删除本地数据库 + DataBaseManager.get.deleteTaskById(taskId) + } } else { loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) diff --git a/app/src/main/res/mipmap-xhdpi/defaultcluster.png b/app/src/main/res/mipmap-xhdpi/defaultcluster.png new file mode 100644 index 0000000..7060775 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/defaultcluster.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label.png b/app/src/main/res/mipmap-xhdpi/label.png new file mode 100644 index 0000000..257eabf --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label.png Binary files differ diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 8c5a880..0dc3d5d 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -3,6 +3,7 @@ import android.app.ProgressDialog import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -20,13 +21,10 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.* import com.casic.detector.BuildConfig import com.casic.detector.R import com.casic.detector.bean.LabelBean -import com.casic.detector.bean.TaskBean import com.casic.detector.callback.ILocationListener import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay @@ -78,7 +76,6 @@ private var longitude: Double = 0.0 private val powerManager by lazy { getSystemService() } private var wakeLock: PowerManager.WakeLock? = null - private var taskBean: TaskBean? = null private val gson by lazy { Gson() } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,6 +109,8 @@ //显示定位小蓝点 locationStyle = MyLocationStyle() locationStyle.interval(2000) + locationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)) + locationStyle.strokeColor(Color.argb(0, 0, 0, 0)) locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。 aMap.myLocationStyle = locationStyle//设置定位蓝点的Style aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点 @@ -269,36 +268,46 @@ clusterOverlay = ClusterOverlay(context, aMap, clusterItems, regionRadius) clusterOverlay?.setClusterRender { clusterNum -> val radius = 80f.dp2px(context) - if (clusterNum == 1) { - var bitmapDrawable: Drawable? = backDrawables[1] - if (bitmapDrawable == null) { - bitmapDrawable = resources.getDrawable(R.mipmap.label_location) - backDrawables[1] = bitmapDrawable - } - bitmapDrawable!! - } else if (clusterNum < 5) { - var bitmapDrawable: Drawable? = backDrawables[2] + if (clusterNum == 0) { + var bitmapDrawable = backDrawables[0] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(159, 210, 154, 6)) + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) + ) + backDrawables[0] = bitmapDrawable + } + bitmapDrawable + } + if (clusterNum == 1) { + var bitmapDrawable = backDrawables[1] + if (bitmapDrawable == null) { + bitmapDrawable = resources.getDrawable(R.mipmap.label) + backDrawables[1] = bitmapDrawable + } + bitmapDrawable + } else if (clusterNum < 5) { + var bitmapDrawable = backDrawables[2] + if (bitmapDrawable == null) { + bitmapDrawable = BitmapDrawable( + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) ) backDrawables[2] = bitmapDrawable } bitmapDrawable } else if (clusterNum < 10) { - var bitmapDrawable: Drawable? = backDrawables[3] + var bitmapDrawable = backDrawables[3] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(199, 217, 114, 0)) + null, radius.drawCircle(Color.argb(199, 30, 144, 255)) ) backDrawables[3] = bitmapDrawable } bitmapDrawable } else { - var bitmapDrawable: Drawable? = backDrawables[4] + var bitmapDrawable = backDrawables[4] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(235, 215, 66, 2)) + null, radius.drawCircle(Color.argb(235, 65, 105, 225)) ) backDrawables[4] = bitmapDrawable } @@ -415,8 +424,7 @@ .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - taskBean = task[position] - + val taskBean = task[position] AlertControlDialog.Builder() .setContext(context) .setTitle("提示") @@ -426,11 +434,19 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - uploadTask(taskBean?.taskId, "1") + detectRedrawGraphic(taskBean.taskId) + aMap.moveCamera( + CameraUpdateFactory.newLatLngZoom( + LatLng( + taskBean.lat.toDouble(), taskBean.lng.toDouble() + ), 15f + ) + ) + uploadTask(taskBean.taskId, "1") } override fun onCancelClick() { - uploadTask(taskBean?.taskId, "2") + uploadTask(taskBean.taskId, "2") } }).build().show() } @@ -456,6 +472,33 @@ } } + private fun detectRedrawGraphic(taskId: String) { + val tasks = DataBaseManager.get.queryTaskById(taskId) + if (tasks.isNotEmpty()) { + tasks.forEach { + val latLng = LatLng(it.lat.toDouble(), it.lng.toDouble()) + val otMarkerOptions = MarkerOptions() + otMarkerOptions.position(latLng) + otMarkerOptions.visible(true) // 设置可见 + if (it.state == "未开始") { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_red1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } else { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_blue1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } + aMap.addMarker(otMarkerOptions) + } + } + showLabelsOnMap() + } + private fun uploadTask(taskId: String?, state: String) { if (isNetworkConnected()) { val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String @@ -527,7 +570,7 @@ } } - //事件上报 + //TODO 事件上报 private fun uploadEvent() { if (latitude != 0.0 && longitude != 0.0) { if (true) { diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index e22fef1..b0b56c5 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -138,8 +138,11 @@ val response = RetrofitServiceManager.uploadTask(userId, taskId, state) if (response.separateResponseState()) { loadState.value = LoadState.Success - //删除本地数据库 - DataBaseManager.get.deleteTaskById(taskId) + if (state == "2") { + "工单${taskId}已提交!".show(BaseApplication.get()) + //删除本地数据库 + DataBaseManager.get.deleteTaskById(taskId) + } } else { loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) diff --git a/app/src/main/res/mipmap-xhdpi/defaultcluster.png b/app/src/main/res/mipmap-xhdpi/defaultcluster.png new file mode 100644 index 0000000..7060775 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/defaultcluster.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label.png b/app/src/main/res/mipmap-xhdpi/label.png new file mode 100644 index 0000000..257eabf --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label_blue1.png b/app/src/main/res/mipmap-xhdpi/label_blue1.png new file mode 100644 index 0000000..6e30fc6 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label_blue1.png Binary files differ diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 8c5a880..0dc3d5d 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -3,6 +3,7 @@ import android.app.ProgressDialog import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -20,13 +21,10 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.* import com.casic.detector.BuildConfig import com.casic.detector.R import com.casic.detector.bean.LabelBean -import com.casic.detector.bean.TaskBean import com.casic.detector.callback.ILocationListener import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay @@ -78,7 +76,6 @@ private var longitude: Double = 0.0 private val powerManager by lazy { getSystemService() } private var wakeLock: PowerManager.WakeLock? = null - private var taskBean: TaskBean? = null private val gson by lazy { Gson() } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,6 +109,8 @@ //显示定位小蓝点 locationStyle = MyLocationStyle() locationStyle.interval(2000) + locationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)) + locationStyle.strokeColor(Color.argb(0, 0, 0, 0)) locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。 aMap.myLocationStyle = locationStyle//设置定位蓝点的Style aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点 @@ -269,36 +268,46 @@ clusterOverlay = ClusterOverlay(context, aMap, clusterItems, regionRadius) clusterOverlay?.setClusterRender { clusterNum -> val radius = 80f.dp2px(context) - if (clusterNum == 1) { - var bitmapDrawable: Drawable? = backDrawables[1] - if (bitmapDrawable == null) { - bitmapDrawable = resources.getDrawable(R.mipmap.label_location) - backDrawables[1] = bitmapDrawable - } - bitmapDrawable!! - } else if (clusterNum < 5) { - var bitmapDrawable: Drawable? = backDrawables[2] + if (clusterNum == 0) { + var bitmapDrawable = backDrawables[0] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(159, 210, 154, 6)) + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) + ) + backDrawables[0] = bitmapDrawable + } + bitmapDrawable + } + if (clusterNum == 1) { + var bitmapDrawable = backDrawables[1] + if (bitmapDrawable == null) { + bitmapDrawable = resources.getDrawable(R.mipmap.label) + backDrawables[1] = bitmapDrawable + } + bitmapDrawable + } else if (clusterNum < 5) { + var bitmapDrawable = backDrawables[2] + if (bitmapDrawable == null) { + bitmapDrawable = BitmapDrawable( + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) ) backDrawables[2] = bitmapDrawable } bitmapDrawable } else if (clusterNum < 10) { - var bitmapDrawable: Drawable? = backDrawables[3] + var bitmapDrawable = backDrawables[3] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(199, 217, 114, 0)) + null, radius.drawCircle(Color.argb(199, 30, 144, 255)) ) backDrawables[3] = bitmapDrawable } bitmapDrawable } else { - var bitmapDrawable: Drawable? = backDrawables[4] + var bitmapDrawable = backDrawables[4] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(235, 215, 66, 2)) + null, radius.drawCircle(Color.argb(235, 65, 105, 225)) ) backDrawables[4] = bitmapDrawable } @@ -415,8 +424,7 @@ .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - taskBean = task[position] - + val taskBean = task[position] AlertControlDialog.Builder() .setContext(context) .setTitle("提示") @@ -426,11 +434,19 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - uploadTask(taskBean?.taskId, "1") + detectRedrawGraphic(taskBean.taskId) + aMap.moveCamera( + CameraUpdateFactory.newLatLngZoom( + LatLng( + taskBean.lat.toDouble(), taskBean.lng.toDouble() + ), 15f + ) + ) + uploadTask(taskBean.taskId, "1") } override fun onCancelClick() { - uploadTask(taskBean?.taskId, "2") + uploadTask(taskBean.taskId, "2") } }).build().show() } @@ -456,6 +472,33 @@ } } + private fun detectRedrawGraphic(taskId: String) { + val tasks = DataBaseManager.get.queryTaskById(taskId) + if (tasks.isNotEmpty()) { + tasks.forEach { + val latLng = LatLng(it.lat.toDouble(), it.lng.toDouble()) + val otMarkerOptions = MarkerOptions() + otMarkerOptions.position(latLng) + otMarkerOptions.visible(true) // 设置可见 + if (it.state == "未开始") { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_red1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } else { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_blue1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } + aMap.addMarker(otMarkerOptions) + } + } + showLabelsOnMap() + } + private fun uploadTask(taskId: String?, state: String) { if (isNetworkConnected()) { val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String @@ -527,7 +570,7 @@ } } - //事件上报 + //TODO 事件上报 private fun uploadEvent() { if (latitude != 0.0 && longitude != 0.0) { if (true) { diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index e22fef1..b0b56c5 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -138,8 +138,11 @@ val response = RetrofitServiceManager.uploadTask(userId, taskId, state) if (response.separateResponseState()) { loadState.value = LoadState.Success - //删除本地数据库 - DataBaseManager.get.deleteTaskById(taskId) + if (state == "2") { + "工单${taskId}已提交!".show(BaseApplication.get()) + //删除本地数据库 + DataBaseManager.get.deleteTaskById(taskId) + } } else { loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) diff --git a/app/src/main/res/mipmap-xhdpi/defaultcluster.png b/app/src/main/res/mipmap-xhdpi/defaultcluster.png new file mode 100644 index 0000000..7060775 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/defaultcluster.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label.png b/app/src/main/res/mipmap-xhdpi/label.png new file mode 100644 index 0000000..257eabf --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label_blue1.png b/app/src/main/res/mipmap-xhdpi/label_blue1.png new file mode 100644 index 0000000..6e30fc6 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label_blue1.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label_red1.png b/app/src/main/res/mipmap-xhdpi/label_red1.png new file mode 100644 index 0000000..36b8e04 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label_red1.png Binary files differ diff --git a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java index 32220b6..8aedec5 100644 --- a/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java +++ b/app/src/main/java/com/casic/detector/cluster/ClusterOverlay.java @@ -288,7 +288,7 @@ if (clusterRender != null && clusterRender.getDrawableByCount(num) != null) { textView.setBackgroundDrawable(clusterRender.getDrawableByCount(num)); } else { - textView.setBackgroundResource(R.mipmap.label_location); + textView.setBackgroundResource(R.mipmap.defaultcluster); } bitmapDescriptor = BitmapDescriptorFactory.fromView(textView); lruCache.put(num, bitmapDescriptor); diff --git a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt index 988d439..dd6f28d 100644 --- a/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt +++ b/app/src/main/java/com/casic/detector/utils/DataBaseManager.kt @@ -94,7 +94,7 @@ return result.distinctBy { it.taskId } } - private fun queryTaskById(taskId: String): List { + fun queryTaskById(taskId: String): List { return taskBeanDao.queryBuilder().where(TaskBeanDao.Properties.TaskId.eq(taskId)).list() } diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 8c5a880..0dc3d5d 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -3,6 +3,7 @@ import android.app.ProgressDialog import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -20,13 +21,10 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.MyLocationStyle +import com.amap.api.maps.model.* import com.casic.detector.BuildConfig import com.casic.detector.R import com.casic.detector.bean.LabelBean -import com.casic.detector.bean.TaskBean import com.casic.detector.callback.ILocationListener import com.casic.detector.cluster.ClusterItem import com.casic.detector.cluster.ClusterOverlay @@ -78,7 +76,6 @@ private var longitude: Double = 0.0 private val powerManager by lazy { getSystemService() } private var wakeLock: PowerManager.WakeLock? = null - private var taskBean: TaskBean? = null private val gson by lazy { Gson() } override fun onCreate(savedInstanceState: Bundle?) { @@ -112,6 +109,8 @@ //显示定位小蓝点 locationStyle = MyLocationStyle() locationStyle.interval(2000) + locationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)) + locationStyle.strokeColor(Color.argb(0, 0, 0, 0)) locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)//定位、但不会移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。 aMap.myLocationStyle = locationStyle//设置定位蓝点的Style aMap.isMyLocationEnabled = true//设置是否显示定位小蓝点 @@ -269,36 +268,46 @@ clusterOverlay = ClusterOverlay(context, aMap, clusterItems, regionRadius) clusterOverlay?.setClusterRender { clusterNum -> val radius = 80f.dp2px(context) - if (clusterNum == 1) { - var bitmapDrawable: Drawable? = backDrawables[1] - if (bitmapDrawable == null) { - bitmapDrawable = resources.getDrawable(R.mipmap.label_location) - backDrawables[1] = bitmapDrawable - } - bitmapDrawable!! - } else if (clusterNum < 5) { - var bitmapDrawable: Drawable? = backDrawables[2] + if (clusterNum == 0) { + var bitmapDrawable = backDrawables[0] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(159, 210, 154, 6)) + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) + ) + backDrawables[0] = bitmapDrawable + } + bitmapDrawable + } + if (clusterNum == 1) { + var bitmapDrawable = backDrawables[1] + if (bitmapDrawable == null) { + bitmapDrawable = resources.getDrawable(R.mipmap.label) + backDrawables[1] = bitmapDrawable + } + bitmapDrawable + } else if (clusterNum < 5) { + var bitmapDrawable = backDrawables[2] + if (bitmapDrawable == null) { + bitmapDrawable = BitmapDrawable( + null, radius.drawCircle(Color.argb(159, 100, 149, 237)) ) backDrawables[2] = bitmapDrawable } bitmapDrawable } else if (clusterNum < 10) { - var bitmapDrawable: Drawable? = backDrawables[3] + var bitmapDrawable = backDrawables[3] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(199, 217, 114, 0)) + null, radius.drawCircle(Color.argb(199, 30, 144, 255)) ) backDrawables[3] = bitmapDrawable } bitmapDrawable } else { - var bitmapDrawable: Drawable? = backDrawables[4] + var bitmapDrawable = backDrawables[4] if (bitmapDrawable == null) { bitmapDrawable = BitmapDrawable( - null, radius.drawCircle(Color.argb(235, 215, 66, 2)) + null, radius.drawCircle(Color.argb(235, 65, 105, 225)) ) backDrawables[4] = bitmapDrawable } @@ -415,8 +424,7 @@ .setActionItemTitle(arrayList) .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { override fun onActionItemClick(position: Int) { - taskBean = task[position] - + val taskBean = task[position] AlertControlDialog.Builder() .setContext(context) .setTitle("提示") @@ -426,11 +434,19 @@ .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onConfirmClick() { - uploadTask(taskBean?.taskId, "1") + detectRedrawGraphic(taskBean.taskId) + aMap.moveCamera( + CameraUpdateFactory.newLatLngZoom( + LatLng( + taskBean.lat.toDouble(), taskBean.lng.toDouble() + ), 15f + ) + ) + uploadTask(taskBean.taskId, "1") } override fun onCancelClick() { - uploadTask(taskBean?.taskId, "2") + uploadTask(taskBean.taskId, "2") } }).build().show() } @@ -456,6 +472,33 @@ } } + private fun detectRedrawGraphic(taskId: String) { + val tasks = DataBaseManager.get.queryTaskById(taskId) + if (tasks.isNotEmpty()) { + tasks.forEach { + val latLng = LatLng(it.lat.toDouble(), it.lng.toDouble()) + val otMarkerOptions = MarkerOptions() + otMarkerOptions.position(latLng) + otMarkerOptions.visible(true) // 设置可见 + if (it.state == "未开始") { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_red1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } else { + otMarkerOptions.icon( + BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(resources, R.mipmap.label_blue1) + ) + ).period(99).title("工单标识器").snippet(it.markerRealId) + } + aMap.addMarker(otMarkerOptions) + } + } + showLabelsOnMap() + } + private fun uploadTask(taskId: String?, state: String) { if (isNetworkConnected()) { val userId = SaveKeyValues.getValue(LocaleConstant.USER_ID, "") as String @@ -527,7 +570,7 @@ } } - //事件上报 + //TODO 事件上报 private fun uploadEvent() { if (latitude != 0.0 && longitude != 0.0) { if (true) { diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index e22fef1..b0b56c5 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -138,8 +138,11 @@ val response = RetrofitServiceManager.uploadTask(userId, taskId, state) if (response.separateResponseState()) { loadState.value = LoadState.Success - //删除本地数据库 - DataBaseManager.get.deleteTaskById(taskId) + if (state == "2") { + "工单${taskId}已提交!".show(BaseApplication.get()) + //删除本地数据库 + DataBaseManager.get.deleteTaskById(taskId) + } } else { loadState.value = LoadState.Fail response.toErrorMessage().show(BaseApplication.get()) diff --git a/app/src/main/res/mipmap-xhdpi/defaultcluster.png b/app/src/main/res/mipmap-xhdpi/defaultcluster.png new file mode 100644 index 0000000..7060775 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/defaultcluster.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label.png b/app/src/main/res/mipmap-xhdpi/label.png new file mode 100644 index 0000000..257eabf --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label_blue1.png b/app/src/main/res/mipmap-xhdpi/label_blue1.png new file mode 100644 index 0000000..6e30fc6 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label_blue1.png Binary files differ diff --git a/app/src/main/res/mipmap-xhdpi/label_red1.png b/app/src/main/res/mipmap-xhdpi/label_red1.png new file mode 100644 index 0000000..36b8e04 --- /dev/null +++ b/app/src/main/res/mipmap-xhdpi/label_red1.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/label_location.png b/app/src/main/res/mipmap-xxhdpi/label_location.png deleted file mode 100644 index b89a974..0000000 --- a/app/src/main/res/mipmap-xxhdpi/label_location.png +++ /dev/null Binary files differ