增加评测link功能

This commit is contained in:
squallzhjch
2023-07-14 16:28:19 +08:00
parent be2d0389cf
commit 1412f7106a
22 changed files with 364 additions and 487 deletions

View File

@@ -150,6 +150,8 @@ class MainViewModel @Inject constructor(
//线选择状态
if (bSelectRoad) {
captureLink(it)
} else {
captureItem(it)
}
}
}
@@ -164,14 +166,12 @@ class MainViewModel @Inject constructor(
* 初始化选中的任务高亮高亮
*/
private suspend fun initTaskData() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
val realm = Realm.getDefaultInstance()
val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst()
if (res != null) {
val taskBean = realm.copyFromRealm(res)
mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList)
}
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
val realm = Realm.getDefaultInstance()
val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst()
if (res != null) {
val taskBean = realm.copyFromRealm(res)
mapController.lineHandler.showTaskLines(taskBean.hadLinkDvoList)
}
}
@@ -252,6 +252,13 @@ class MainViewModel @Inject constructor(
}
/**
* 捕捉要素
*/
private suspend fun captureItem(point: GeoPoint) {
}
/**
* 捕获道路和面板
*/
@@ -516,10 +523,8 @@ class MainViewModel @Inject constructor(
bSelectRoad = select
//去掉缓存
linkIdCache = ""
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.lineHandler.removeLine()
liveDataSignList.value = mutableListOf()
}
mapController.lineHandler.removeLine()
liveDataSignList.value = mutableListOf()
}
/**

View File

@@ -154,9 +154,7 @@ class EvaluationResultViewModel @Inject constructor(
viewModelScope.launch {
val link = realmOperateHelper.queryLink(linkId)
link?.let { l ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.lineHandler.showLine(l.geometry)
}
mapController.lineHandler.showLine(l.geometry)
}
}
}

View File

@@ -1,10 +1,7 @@
package com.navinfo.omqs.ui.fragment.evaluationresult
import android.os.Build
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ScProblemTypeBean
import com.navinfo.omqs.databinding.TextItemSelectBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
@@ -21,7 +18,6 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
return BaseViewHolder(viewBinding)
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val bd = holder.viewBinding as TextItemSelectBinding
val title = data[position]

View File

@@ -20,7 +20,6 @@ class MiddleAdapter(private var itemListener: ((Int, String) -> Unit?)? = null)
return BaseViewHolder(viewBinding)
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val bd = holder.viewBinding as TextItemSelectBinding
val title = data[position]
@@ -30,10 +29,10 @@ class MiddleAdapter(private var itemListener: ((Int, String) -> Unit?)? = null)
bd.itemLayout.layoutParams = layoutParams
if (selectTitle == title) {
bd.itemId.setBackgroundResource(R.drawable.shape_bg_blue_bg_4_radius)
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.white))
bd.itemId.setTextColor(holder.viewBinding.root.context.resources.getColor(R.color.white))
} else {
bd.itemId.setBackgroundResource(R.drawable.shape_rect_white_2dp_bg)
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.black))
bd.itemId.setTextColor(holder.viewBinding.root.context.resources.getColor(R.color.black))
}
bd.root.setOnClickListener {
if (selectTitle != title) {

View File

@@ -73,13 +73,11 @@ class PhenomenonFragment :
}
binding.phenomenonRightRecyclerview.adapter = rightAdapter
//右侧菜单增加组标题
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
binding.phenomenonRightRecyclerview.addItemDecoration(
RightGroupHeaderDecoration(
requireContext()
)
binding.phenomenonRightRecyclerview.addItemDecoration(
RightGroupHeaderDecoration(
requireContext()
)
}
)
//右侧菜单查询数据监听
viewModel.liveDataRightTypeList.observe(viewLifecycleOwner) {
rightAdapter.setSelectTitle(viewModel.liveDataQsRecordBean.value!!.phenomenon)

View File

@@ -1,8 +1,6 @@
package com.navinfo.omqs.ui.fragment.evaluationresult
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -50,13 +48,11 @@ class ProblemLinkFragment : BaseFragment() {
}
binding.linkRightRecyclerview.adapter = rightAdapter
//右侧菜单增加组标题
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
binding.linkRightRecyclerview.addItemDecoration(
RightGroupHeaderDecoration(
requireContext()
)
binding.linkRightRecyclerview.addItemDecoration(
RightGroupHeaderDecoration(
requireContext()
)
}
)
//右侧菜单查询数据监听
viewModel.liveDataRightTypeList.observe(viewLifecycleOwner) {
rightAdapter.setSelectTitle(viewModel.liveDataQsRecordBean.value!!.cause)

View File

@@ -5,9 +5,7 @@ import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.os.Build
import android.view.View
import androidx.annotation.RequiresApi
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ItemDecoration
@@ -17,7 +15,6 @@ import com.navinfo.omqs.R
/**
* 自定义装饰器(实现分组+吸顶效果)
*/
@RequiresApi(Build.VERSION_CODES.M)
class RightGroupHeaderDecoration(context: Context) : ItemDecoration() {
//头部的高
private val mItemHeaderHeight: Int
@@ -35,7 +32,7 @@ class RightGroupHeaderDecoration(context: Context) : ItemDecoration() {
mTextPaddingLeft = dp2px(context, 6f)
mTextRect = Rect()
mItemHeaderPaint = Paint(Paint.ANTI_ALIAS_FLAG)
mItemHeaderPaint.color = context.getColor(R.color.btn_bg_blue)
mItemHeaderPaint.color = context.resources.getColor(R.color.btn_bg_blue)
mTextPaint = Paint(Paint.ANTI_ALIAS_FLAG)
mTextPaint.textSize = 46f
mTextPaint.color = Color.WHITE

View File

@@ -78,9 +78,7 @@ class CanvasFragment : BaseFragment() {
canvasView.setStyle(mStyle)
if (mColor == -1) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mColor = resources.getColor(R.color.black, null)
}
mColor = resources.getColor(R.color.black)
}
canvasView.setPaintColor(mColor)
canvasView.setPaintWidth(width)

View File

@@ -42,6 +42,8 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
binding.taskLinkDataLevel.setOnClickListener(this)
binding.taskLinkBarCancel.setOnClickListener(this)
binding.taskLinkBarSave.setOnClickListener(this)
binding.taskLinkBack.setOnClickListener(this)
binding.taskLinkClear.setOnClickListener(this)
/**
* 数据操作结束
*/
@@ -86,13 +88,11 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
/**
* 线长度
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.measureLayerHandler.lineLenghtLiveData.observe(viewLifecycleOwner) {
binding.taskLinkLength.text = "${it}"
}
mapController.measureLayerHandler.tempLineDistanceLiveData.observe(viewLifecycleOwner) {
(activity as MainActivity).setHomeCenterText(it)
}
mapController.measureLayerHandler.lineLengthLiveData.observe(viewLifecycleOwner) {
binding.taskLinkLength.text = "${it}"
}
mapController.measureLayerHandler.tempLineDistanceLiveData.observe(viewLifecycleOwner) {
(activity as MainActivity).setHomeCenterText(it)
}
}
@@ -142,9 +142,13 @@ class TaskLinkFragment : BaseFragment(), View.OnClickListener {
onBackPressed()
}
binding.taskLinkBarSave -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
viewModel.saveData()
}
viewModel.saveData()
}
binding.taskLinkBack -> {
viewModel.removeLinkLastPoint()
}
binding.taskLinkClear -> {
viewModel.clearLink()
}
}
}

View File

@@ -12,7 +12,7 @@ import com.navinfo.omqs.ui.other.BaseViewHolder
data class TaskLinkInfoAdapterItem(
val title: String,
val type: String
val type: Int
)
class TaskLinkMiddleAdapter(private var itemListener: ((Int, TaskLinkInfoAdapterItem) -> Unit?)? = null) :
@@ -26,17 +26,16 @@ class TaskLinkMiddleAdapter(private var itemListener: ((Int, TaskLinkInfoAdapter
return BaseViewHolder(viewBinding)
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val binding = holder.viewBinding as AdapterTaskLinkInfoBinding
binding.title.text = data[position].title
if (selectTitle == binding.title.text) {
binding.title.setBackgroundResource(R.drawable.shape_bg_blue_bg_4_radius)
binding.title.setTextColor(holder.viewBinding.root.context.getColor(R.color.white))
binding.title.setTextColor(holder.viewBinding.root.context.resources.getColor(R.color.white))
} else {
binding.title.setBackgroundResource(R.drawable.shape_rect_white_2dp_bg)
binding.title.setTextColor(holder.viewBinding.root.context.getColor(R.color.black))
binding.title.setTextColor(holder.viewBinding.root.context.resources.getColor(R.color.black))
}
binding.root.setOnClickListener {
if (selectTitle != data[position].title) {

View File

@@ -7,6 +7,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
import com.navinfo.collect.library.data.entity.LinkInfoBean
import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.utils.GeometryTools
@@ -32,38 +33,38 @@ class TaskLinkViewModel @Inject constructor(
* 种别
*/
private val kindList = listOf(
TaskLinkInfoAdapterItem("高速道路", "1"),
TaskLinkInfoAdapterItem("城市高速", "2"),
TaskLinkInfoAdapterItem("国道", "3"),
TaskLinkInfoAdapterItem("省道", "4"),
TaskLinkInfoAdapterItem("县道", "6"),
TaskLinkInfoAdapterItem("乡镇村道路", "7"),
TaskLinkInfoAdapterItem("其他道路", "8"),
TaskLinkInfoAdapterItem("非引导道路", "9"),
TaskLinkInfoAdapterItem("步行道路", "10"),
TaskLinkInfoAdapterItem("人渡", "11"),
TaskLinkInfoAdapterItem("轮渡", "13"),
TaskLinkInfoAdapterItem("自行车道路", "15"),
TaskLinkInfoAdapterItem("高速道路", 1),
TaskLinkInfoAdapterItem("城市高速", 2),
TaskLinkInfoAdapterItem("国道", 3),
TaskLinkInfoAdapterItem("省道", 4),
TaskLinkInfoAdapterItem("县道", 6),
TaskLinkInfoAdapterItem("乡镇村道路", 7),
TaskLinkInfoAdapterItem("其他道路", 8),
TaskLinkInfoAdapterItem("非引导道路", 9),
TaskLinkInfoAdapterItem("步行道路", 10),
TaskLinkInfoAdapterItem("人渡", 11),
TaskLinkInfoAdapterItem("轮渡", 13),
TaskLinkInfoAdapterItem("自行车道路", 15),
)
/**
* FunctionGrade 功能等级
*/
private val functionLevelList = listOf(
TaskLinkInfoAdapterItem("等级1", "1"),
TaskLinkInfoAdapterItem("等级2", "2"),
TaskLinkInfoAdapterItem("等级3", "3"),
TaskLinkInfoAdapterItem("等级4", "4"),
TaskLinkInfoAdapterItem("等级5", "5"),
TaskLinkInfoAdapterItem("等级1", 1),
TaskLinkInfoAdapterItem("等级2", 2),
TaskLinkInfoAdapterItem("等级3", 3),
TaskLinkInfoAdapterItem("等级4", 4),
TaskLinkInfoAdapterItem("等级5", 5),
)
/**
* 数据级别
*/
private val dataLevelList = listOf(
TaskLinkInfoAdapterItem("Pro lane model(有高精车道模型覆盖的高速和城高link)", "1"),
TaskLinkInfoAdapterItem("Lite lane model(有高精车道模型覆盖的普通路link)", "2"),
TaskLinkInfoAdapterItem("Standard road model(其他link)", "3"),
TaskLinkInfoAdapterItem("Pro lane model(有高精车道模型覆盖的高速和城高link)", 1),
TaskLinkInfoAdapterItem("Lite lane model(有高精车道模型覆盖的普通路link)", 2),
TaskLinkInfoAdapterItem("Standard road model(其他link)", 3),
)
/**
@@ -125,9 +126,7 @@ class TaskLinkViewModel @Inject constructor(
* 编辑点
*/
fun addPoint() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.measureLayerHandler.drawLineOrPolygon(false)
}
mapController.measureLayerHandler.drawLineOrPolygon(false)
}
/**
@@ -154,9 +153,7 @@ class TaskLinkViewModel @Inject constructor(
}
override fun onCleared() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.measureLayerHandler.clear()
}
mapController.measureLayerHandler.clear()
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
super.onCleared()
}
@@ -164,7 +161,6 @@ class TaskLinkViewModel @Inject constructor(
/**
* 保存数据
*/
@RequiresApi(Build.VERSION_CODES.M)
fun saveData() {
viewModelScope.launch(Dispatchers.Default) {
if (liveDataTaskBean.value == null) {
@@ -189,10 +185,16 @@ class TaskLinkViewModel @Inject constructor(
return@launch
}
val linkBean = HadLinkDvoBean(
// taskId = liveDataTaskBean.value!!.id,
linkPid = UUID.randomUUID().toString(),
linkStatus = 3,
geometry = GeometryTools.getLineString(mapController.measureLayerHandler.mPathLayer.points),
linkLength = mapController.measureLayerHandler.lineLenghtLiveData.value!!,
linkInfo = LinkInfoBean(
kind = liveDataSelectKind.value!!.type,
functionLevel = liveDataSelectFunctionLevel.value!!.type,
dataLevel = liveDataSelectDataLevel.value!!.type,
length = mapController.measureLayerHandler.lineLengthLiveData.value!!,
)
)
val task: TaskBean = liveDataTaskBean.value!!
task.hadLinkDvoList.add(linkBean)
@@ -200,6 +202,7 @@ class TaskLinkViewModel @Inject constructor(
realm.executeTransaction {
it.copyToRealmOrUpdate(task)
}
mapController.lineHandler.addTaskLink(linkBean)
sharedPreferences.edit().putString(Constant.SHARED_SYNC_TASK_LINK_ID, linkBean.linkPid)
.apply()
liveDataFinish.postValue(true)
@@ -214,4 +217,18 @@ class TaskLinkViewModel @Inject constructor(
getTaskBean()
}
}
/**
* 绘制线的时候回退点
*/
fun removeLinkLastPoint() {
mapController.measureLayerHandler.drawLineBackspace()
}
/**
* 清除重绘
*/
fun clearLink() {
mapController.measureLayerHandler.clear()
}
}

View File

@@ -42,10 +42,7 @@ class TaskListFragment : BaseFragment() {
}
when (status) {
TaskListAdapter.Companion.ItemClickStatus.ITEM_LAYOUT_CLICK -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
viewModel.setSelectTaskBean(taskBean)
} else {
}
viewModel.setSelectTaskBean(taskBean)
}
TaskListAdapter.Companion.ItemClickStatus.DELETE_LAYOUT_CLICK -> {
context?.let { viewModel.removeTask(it, taskBean) }
@@ -81,7 +78,7 @@ class TaskListFragment : BaseFragment() {
binding.taskListRecyclerview.layoutManager = layoutManager
binding.taskListRecyclerview.adapter = adapter
viewModel.liveDataTaskList.observe(viewLifecycleOwner) {
adapter.initSelectTask(it,viewModel.currentSelectTaskBean?.id)
adapter.initSelectTask(it, viewModel.currentSelectTaskBean?.id)
}
//监听并调用上传

View File

@@ -152,9 +152,7 @@ class TaskViewModel @Inject constructor(
currentSelectTaskBean = item
liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
withContext(Dispatchers.Main) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
showTaskLinks(currentSelectTaskBean!!)
}
showTaskLinks(currentSelectTaskBean!!)
}
break
}
@@ -173,17 +171,14 @@ class TaskViewModel @Inject constructor(
currentSelectTaskBean = taskBean
liveDataTaskLinks.value = taskBean.hadLinkDvoList
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
showTaskLinks(taskBean)
}
showTaskLinks(taskBean)
}
@RequiresApi(Build.VERSION_CODES.M)
private fun showTaskLinks(taskBean: TaskBean) {
mapController.lineHandler.omdbTaskLinkLayer.removeAll()
mapController.lineHandler.removeAllTaskLine()
if (taskBean.hadLinkDvoList.isNotEmpty()) {
mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList)
mapController.lineHandler.showTaskLines(taskBean.hadLinkDvoList)
var maxX = 0.0
var maxY = 0.0
var minX = 0.0
@@ -218,9 +213,9 @@ class TaskViewModel @Inject constructor(
/**
* 高亮当前选中的link
*/
@RequiresApi(Build.VERSION_CODES.M)
fun showCurrentLink(link: HadLinkDvoBean) {
mapController.lineHandler.omdbTaskLinkLayer.showSelectLine(link)
mapController.lineHandler.showLine(link.geometry)
// mapController.lineHandler.omdbTaskLinkLayer.showSelectLine(link)
val geometry = GeometryTools.createGeometry(link.geometry)
if (geometry != null) {
val envelope = geometry.envelopeInternal
@@ -235,9 +230,7 @@ class TaskViewModel @Inject constructor(
}
override fun onCleared() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.lineHandler.omdbTaskLinkLayer.clearSelectLine()
}
mapController.lineHandler.removeLine()
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
super.onCleared()
}

View File

@@ -122,18 +122,16 @@ class TextProgressButtonBar : View {
* 绘制进度值
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val shader = LinearGradient(
oval.left,
oval.top,
oval.right,
oval.bottom,
mStartColor,
mCurrentColor,
Shader.TileMode.MIRROR
)
it.shader = shader
}
val shader = LinearGradient(
oval.left,
oval.top,
oval.right,
oval.bottom,
mStartColor,
mCurrentColor,
Shader.TileMode.MIRROR
)
it.shader = shader
canvas.drawRoundRect(oval, progress.toFloat(), progress.toFloat(), it)
} else {
oval = RectF(
@@ -143,18 +141,16 @@ class TextProgressButtonBar : View {
* 绘制进度值
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val shader = LinearGradient(
oval.left,
oval.top,
oval.right,
oval.bottom,
mStartColor,
mCurrentColor,
Shader.TileMode.CLAMP
)
it.shader = shader
}
val shader = LinearGradient(
oval.left,
oval.top,
oval.right,
oval.bottom,
mStartColor,
mCurrentColor,
Shader.TileMode.CLAMP
)
it.shader = shader
canvas.drawRoundRect(oval, corner.toFloat(), corner.toFloat(), it)
}
/***

View File

@@ -86,7 +86,7 @@
android:orientation="horizontal">
<ImageView
android:id="@+id/sketch_back"
android:id="@+id/task_link_back"
style="@style/sketch_operation_style"
android:src="@drawable/sketch_back" />
@@ -94,17 +94,8 @@
style="@style/link_gray_style"
android:layout_margin="2dp" />
<ImageView
android:id="@+id/sketch_forward"
style="@style/sketch_operation_style"
android:src="@drawable/sketch_forward" />
<View
style="@style/link_gray_style"
android:layout_margin="2dp" />
<TextView
android:id="@+id/sketch_clear"
android:id="@+id/task_link_clear"
style="@style/sketch_operation_style"
android:text="重绘" />
</LinearLayout>