Compare commits

...

11 Commits

Author SHA1 Message Date
12e9fd1a2a feat: 增加交限和交通灯的渲染图标 2023-05-25 15:10:40 +08:00
80b8b60556 fix: 修改数据导入 2023-05-24 17:12:34 +08:00
squallzhjch
4e997b8632 调整UI
调整道路属性面板
2023-05-24 15:57:52 +08:00
4d579d87c4 fix: 增加右偏功能,增加角度计算功能 2023-05-24 14:04:11 +08:00
f160f1dd00 fix: 修改git忽略文件 2023-05-23 15:44:41 +08:00
e606d83bcb Merge branch 'master' into vtm-lib 2023-05-23 15:43:57 +08:00
47495bd6ef fix: 增加vtm子模块 2023-05-23 15:42:45 +08:00
squallzhjch
d89ad95a17 调整UI
增加道路属性面板
2023-05-23 14:03:36 +08:00
squallzhjch
6d0f36068d Merge branch 'master' of gitlab.navinfo.com:CollectVehicle/OneMapQS 2023-05-23 09:48:21 +08:00
squallzhjch
dc6b4b91e5 调整UI
增加道路属性面板
2023-05-23 09:48:07 +08:00
71dab4d22b feat: 以submodule方式引入vtm源码,方便后续修改 2023-05-22 17:48:20 +08:00
57 changed files with 786 additions and 232 deletions

4
.gitignore vendored
View File

@@ -12,6 +12,4 @@
/build
/captures
.externalNativeBuild
.cxx
local.properties
/vtm/
.cxx

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "vtm"]
path = vtm
url = git@github.com:mapsforge/vtm.git

View File

@@ -5,6 +5,11 @@
"code": 2001,
"name": "道路线"
},
"2002": {
"table": "OMDB_RD_LINK_FUNCTION_CLASS",
"code": 2002,
"name": "道路功能等级"
},
"2008": {
"table": "OMDB_RD_LINK_KIND",
"code": 2008,
@@ -15,6 +20,51 @@
"code": 2010,
"name": "道路方向"
},
"2019": {
"table": "OMDB_LINK_SPEEDLIMIT",
"code": 2019,
"name": "常规线限速"
},
"2020": {
"table": "OMDB_LINK_SPEEDLIMIT_COND",
"code": 2020,
"name": "条件线限速"
},
"2021": {
"table": "OMDB_LINK_SPEEDLIMIT_VAR",
"code": 2021,
"name": "可变线限速"
},
"2022": {
"table": "OMDB_CON_ACCESS",
"code": 2022,
"name": "全封闭"
},
"2037": {
"table": "OMDB_FORM_OF_WAY",
"code": 2037,
"name": "匝道"
},
"2040": {
"table": "OMDB_MULTI_DIGITIZED",
"code": 2040,
"name": "上下线分离"
},
"2041":{
"table": "OMDB_LANE_NUM",
"code": 2041,
"name": "车道数"
},
"2201":{
"table": "OMDB_BRIDGE",
"code": 2201,
"name": "桥"
},
"2202":{
"table": "OMDB_TUNNEL",
"code": 2202,
"name": "隧道"
},
"4002": {
"table": "OMDB_SPEEDLIMIT",
"code": 4002,
@@ -25,6 +75,12 @@
"v": "0",
"klib": "maxSpeed",
"vlib": "限"
},
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "translateRight()"
}
]
},
@@ -66,23 +122,36 @@
}
]
},
"4006":{
"table": "OMDB_RESTRICTION",
"code": 4006,
"name": "普通交限",
"transformer": [
{
"k": "geometry",
"v": "~",
"klib": "geometry",
"vlib": "translateRight()"
}
]
},
"4022": {
"table": "OMDB_TRAFFICLIGHT",
"code": 4022,
"name": "交通灯",
"transformer": [
{
"k": "angle",
"v": "~",
"klib": "angle",
"vlib": "0"
}
]
},
"5001":{
"table": "OMDB_LANE_LINK_LG",
"code": 5001,
"name": "车道中心线"
},
"2041":{
"table": "OMDB_LANE_NUM",
"code": 2041,
"name": "车道数",
"transformer": [
{
"k": "laneS2e",
"v": "~",
"klib": "left_00",
"vlib": "laneNumLeft00()"
}
]
}
}
}

View File

@@ -75,7 +75,7 @@ class Constant {
const val SELECT_TAKEPHOTO_OR_RECORD = "select_takephoto_or_record"
const val OMDB_CONFIG = "omdb_config.json"
const val OTHER_CONFIG = "other.config"
const val OTHER_CONFIG = "other_config.json"
val OMDB_LAYER_VISIBLE_LIST: MutableList<String> = mutableListOf() // 记录OMDB数据显示的图层名称列表

View File

@@ -32,23 +32,25 @@ class ImportConfig {
}
// 开始解析key和value并对数据进行匹配
m@ for (k in processKeyOrValue(key)) {
for (v in processKeyOrValue(value)) {
if ("~" == v &&renderEntity.properties.containsKey(k)) { // ~符可以匹配任意元素
if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法
val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") }
method.call(preProcess, renderEntity)
} else {
renderEntity.properties[keylib] = valuelib
if (renderEntity.properties.containsKey(k)) { // json配置的key可以匹配到数据
for (v in processKeyOrValue(value)) {
if ("~" == v ) { // ~符可以匹配任意元素
if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法
val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") }
method.call(preProcess, renderEntity)
} else {
renderEntity.properties[keylib] = valuelib
}
break@m
} else if (renderEntity.properties[k] == v) { // 完全匹配
if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法
val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") }
method.call(preProcess, renderEntity)
} else {
renderEntity.properties[keylib] = valuelib
}
break@m
}
break@m
} else if (renderEntity.properties[k] == v) {
if (valuelib.endsWith("()")) { // 以()结尾说明该value配置是一个function需要通过反射调用指定方法
val method = preProcess::class.declaredMemberFunctions.first { it.name == valuelib.replace("()", "") }
method.call(preProcess, renderEntity)
} else {
renderEntity.properties[keylib] = valuelib
}
break@m
}
}
}

View File

@@ -6,7 +6,7 @@ import kotlinx.parcelize.Parcelize
@Parcelize
data class SignBean(
//图标ID
val iconId: Int,
var iconId: Int = 0,
//定位点到目标距离
val distance: Int = 0,
//图表中的问题
@@ -17,8 +17,8 @@ data class SignBean(
val linkId: String,
//坐标
val geometry: String,
//底部文字
val bottomText: String,
//名称
val name: String,
//底部右侧文字
val bottomRightText: String,
//要素code类型

View File

@@ -23,21 +23,19 @@ class ImportPreProcess {
fun translateRight(renderEntity: RenderEntity): RenderEntity {
// 获取当前renderEntity的geometry
val geometry = renderEntity.wkt
var angle = 0.0 // geometry的角度如果是点获取angle如果是线获取最后两个点的方向
var radian = 0.0 // geometry的角度如果是点获取angle如果是线获取最后两个点的方向
var point = Coordinate(geometry?.coordinate)
if (Geometry.TYPENAME_POINT == geometry?.geometryType) {
angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
val angle = if(renderEntity?.properties?.get("angle") == null) 0.0 else renderEntity?.properties?.get("angle")?.toDouble()!!
radian = Math.toRadians(angle)
} else if (Geometry.TYPENAME_LINESTRING == geometry?.geometryType) {
val p1: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 2)
val p2: Coordinate = geometry.coordinates.get(geometry.coordinates.size - 1)
// 计算线段的方向
angle = Angle.angle(p1, p2)
radian = Angle.angle(p1, p2)
point = p2
}
// 将角度转换为弧度
val radian = Math.toRadians(angle)
// 计算偏移距离
val dx: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.cos(radian)
val dy: Double = GeometryTools.convertDistanceToDegree(5.0, geometry?.coordinate?.y!!) * Math.sin(radian)
@@ -47,7 +45,29 @@ class ImportPreProcess {
Coordinate(point.getX() + dy, point.getY() - dx)
// 将这个点记录在数据中
renderEntity.properties["geometry"] = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y)).toString()
val geometryTranslate: Geometry = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y))
renderEntity.geometry = geometryTranslate.toString()
return renderEntity
}
fun addAngleFromGeometry(renderEntity: RenderEntity): String {
if (!renderEntity.properties.containsKey("angle")) {
if (renderEntity.wkt!=null) {
val geometry = renderEntity.wkt
var angle: String = "90"
if (geometry?.numPoints!!>=2) {
val p1: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 2)!!
val p2: Coordinate = geometry?.coordinates?.get(geometry.coordinates.size - 1)!!
// 弧度转角度
angle = Math.toDegrees(Angle.angle(p1, p2)).toString()
} else {
angle = "90"
}
// 计算线段的方向
renderEntity.properties["angle"] = angle
return angle
}
}
return "0"
}
}

View File

@@ -1,5 +0,0 @@
package com.navinfo.omqs.rule
class LeftPanel {
}

View File

@@ -182,9 +182,9 @@ class LoginViewModel @Inject constructor(
Realm.setDefaultConfiguration(config)
// 拷贝配置文件到用户目录下
val omdbConfigFile = File(userFolder.absolutePath, Constant.OMDB_CONFIG);
if (!omdbConfigFile.exists()) {
// if (!omdbConfigFile.exists()) {
ResourceUtils.copyFileFromAssets(Constant.OMDB_CONFIG, omdbConfigFile.absolutePath)
}
// }
}
/**

View File

@@ -12,6 +12,7 @@ import androidx.databinding.DataBindingUtil
import androidx.lifecycle.lifecycleScope
import androidx.navigation.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.blankj.utilcode.util.SPStaticUtils
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
@@ -23,6 +24,7 @@ import com.navinfo.omqs.databinding.ActivityMainBinding
import com.navinfo.omqs.http.offlinemapdownload.OfflineMapDownloadManager
import com.navinfo.omqs.tools.LayerConfigUtils
import com.navinfo.omqs.ui.activity.BaseActivity
import com.navinfo.omqs.ui.widget.RecycleViewDivider
import com.navinfo.omqs.util.FlowEventBus
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
@@ -52,14 +54,13 @@ class MainActivity : BaseActivity() {
findNavController(R.id.main_activity_right_fragment)
}
/**
* 提前显示要素看板
*/
private val signAdapter by lazy {
SignAdapter { position, signBean ->
// val directions =
// EmptyFragmentDirections.emptyFragmentToEvaluationResultFragment(
// )
// rightController.navigate(directions)
rightController.currentDestination?.let {
if (it.id == R.id.EmptyFragment) {
if (it.id == R.id.RightEmptyFragment) {
val bundle = Bundle()
bundle.putParcelable("SignBean", signBean)
rightController.navigate(R.id.EvaluationResultFragment, bundle)
@@ -68,6 +69,22 @@ class MainActivity : BaseActivity() {
}
}
/**
* 道路信息看板
*/
private val topSignAdapter by lazy {
TopSignAdapter { position, signBean ->
rightController.currentDestination?.let {
if (it.id == R.id.RightEmptyFragment) {
val bundle = Bundle()
bundle.putParcelable("SignBean", signBean)
rightController.navigate(R.id.EvaluationResultFragment, bundle)
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)
@@ -125,6 +142,18 @@ class MainActivity : BaseActivity() {
}
//道路属性面板
binding.mainActivityTopSignRecyclerview.layoutManager = LinearLayoutManager(
this,
RecyclerView.HORIZONTAL, false
)
// binding.mainActivityTopSignRecyclerview.addItemDecoration(
// RecycleViewDivider(this, LinearLayoutManager.HORIZONTAL)
// )
binding.mainActivityTopSignRecyclerview.adapter = topSignAdapter
//提前显示面板
binding.mainActivitySignRecyclerview.layoutManager = LinearLayoutManager(this)
binding.mainActivitySignRecyclerview.adapter = signAdapter
//增加4dp的间隔
@@ -139,6 +168,10 @@ class MainActivity : BaseActivity() {
signAdapter.refreshData(it)
}
viewModel.liveDataTopSignList.observe(this) {
topSignAdapter.refreshData(it)
}
lifecycleScope.launch {
// 初始化地图图层控制接收器
FlowEventBus.subscribe<List<ImportConfig>>(
@@ -243,7 +276,7 @@ class MainActivity : BaseActivity() {
}
/**
*
*展开或收起右侧面板
*/
fun onSwitchFragment() {
switchFragment = !switchFragment
@@ -255,6 +288,13 @@ class MainActivity : BaseActivity() {
}
}
/**
* 隐藏或显示右侧展开按钮
*/
fun setRightSwitchButton(visibility: Int) {
binding.mainActivityFragmentSwitch.visibility = visibility
}
/**
* 点击录音按钮
*/

View File

@@ -67,9 +67,12 @@ class MainViewModel @Inject constructor(
//地图点击捕捉到的质检数据ID列表
val liveDataQsRecordIdList = MutableLiveData<List<String>>()
//看板数据
//左侧看板数据
val liveDataSignList = MutableLiveData<List<SignBean>>()
//顶部看板数据
val liveDataTopSignList = MutableLiveData<List<SignBean>>()
// var testPoint = GeoPoint(0, 0)
//语音窗体
@@ -150,8 +153,7 @@ class MainViewModel @Inject constructor(
// location.latitude = testPoint.latitude
val geometry = GeometryTools.createGeometry(
GeoPoint(
location.latitude,
location.longitude
location.latitude, location.longitude
)
)
val tileX = RealmSet<Int>()
@@ -176,8 +178,7 @@ class MainViewModel @Inject constructor(
mapController.locationLayerHandler.niLocationFlow.collectLatest { location ->
// location.longitude = testPoint.longitude
// location.latitude = testPoint.latitude
if (!isSelectRoad())
captureLink(GeoPoint(location.latitude, location.longitude))
if (!isSelectRoad()) captureLink(GeoPoint(location.latitude, location.longitude))
}
}
@@ -196,6 +197,8 @@ class MainViewModel @Inject constructor(
)
//看板数据
val signList = mutableListOf<SignBean>()
val topSignList = mutableListOf<SignBean>()
if (linkList.isNotEmpty()) {
val link = linkList[0]
val linkId = link.properties[RenderEntity.Companion.LinkTable.linkPid]
@@ -204,27 +207,36 @@ class MainViewModel @Inject constructor(
var elementList = realmOperateHelper.queryLinkByLinkPid(it)
for (element in elementList) {
val distance = GeometryTools.distanceToDouble(
point,
GeometryTools.createGeoPoint(element.geometry)
point, GeometryTools.createGeoPoint(element.geometry)
)
signList.add(
SignBean(
iconId = SignUtil.getSignIcon(element),
iconText = SignUtil.getSignIconText(element),
distance = distance.toInt(),
elementId = element.id,
linkId = linkId,
geometry = element.geometry,
bottomText = SignUtil.getSignBottomText(element),
bottomRightText = SignUtil.getSignBottomRightText(element),
elementCode = element.code
val signBean = SignBean(
iconId = SignUtil.getSignIcon(element),
iconText = SignUtil.getSignIconText(element),
distance = distance.toInt(),
elementId = element.id,
linkId = linkId,
geometry = element.geometry,
name = SignUtil.getSignNameText(element),
bottomRightText = SignUtil.getSignBottomRightText(element),
elementCode = element.code
)
when (element.code) {
2041, 2008, 2010 -> topSignList.add(
signBean
)
)
else -> signList.add(
signBean
)
}
}
}
}
liveDataSignList.postValue(signList)
liveDataTopSignList.postValue(topSignList.distinctBy { it.elementCode })
liveDataSignList.postValue(signList.distinctBy { it.elementCode })
Log.e("jingo", "自动捕捉数据 共${signList.size}")
}
}
@@ -374,8 +386,7 @@ class MainViewModel @Inject constructor(
if (layerConfigList != null && !layerConfigList.isEmpty()) {
val omdbVisibleList = layerConfigList.filter { importConfig ->
importConfig.tableGroupName == "OMDB数据"
}.first().tableMap.filter {
entry ->
}.first().tableMap.filter { entry ->
val tableInfo = entry.value
!tableInfo.checked
}.map { entry ->
@@ -414,7 +425,7 @@ class MainViewModel @Inject constructor(
// }
// }
when (navDestination.id) {
R.id.EmptyFragment -> {
R.id.RightEmptyFragment -> {
if (list.size == 1) {
val bundle = Bundle()
bundle.putString("QsId", list[0])

View File

@@ -23,9 +23,10 @@ class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null)
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val bd = holder.viewBinding as AdapterSignBinding
val item = data[position]
bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId)
if (item.iconId != 0)
bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId)
bd.signMainIcon.text = item.iconText
bd.signBottomText.text = item.bottomText
bd.signBottomText.text = item.name
bd.signBottomRightText.text = item.bottomRightText
bd.root.setOnClickListener {
itemListener?.invoke(position, item)

View File

@@ -0,0 +1,65 @@
package com.navinfo.omqs.ui.activity.map
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.databinding.AdapterTopSignBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
class TopSignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null) :
BaseRecyclerViewAdapter<SignBean>() {
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_top_sign
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =
AdapterTopSignBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return BaseViewHolder(viewBinding)
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val bd = holder.viewBinding as AdapterTopSignBinding
val item = data[position]
if (item.iconId != 0)
bd.topSignText.background = holder.viewBinding.root.context.getDrawable(item.iconId)
bd.topSignName.text = item.name
bd.topSignText.text = item.iconText
if (data.size == 1) {
bd.topSignLeftLine.visibility = View.GONE
bd.topSignRightLine.visibility = View.GONE
bd.topSignName.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_top_bg)
bd.topSignText.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_bottom_bg)
} else if (position == 0) {
bd.topSignLeftLine.visibility = View.GONE
bd.topSignRightLine.visibility = View.VISIBLE
bd.topSignName.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_left_top_bg)
bd.topSignText.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_left_bottom_bg)
} else if (position == data.size - 1) {
bd.topSignLeftLine.visibility = View.VISIBLE
bd.topSignRightLine.visibility = View.GONE
bd.topSignName.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_right_top_bg)
bd.topSignText.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_right_bottom_bg)
} else {
bd.topSignLeftLine.visibility = View.VISIBLE
bd.topSignRightLine.visibility = View.VISIBLE
bd.topSignName.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_middle_top_bg)
bd.topSignText.background =
holder.viewBinding.root.context.getDrawable(R.drawable.shape_road_info_middle_bottom_bg)
}
bd.root.setOnClickListener {
itemListener?.invoke(position, item)
}
}
}

View File

@@ -5,13 +5,17 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentEmptyBinding
import com.navinfo.omqs.ui.activity.map.MainActivity
class EmptyFragment :Fragment(){
class EmptyFragment : Fragment() {
private var _binding: FragmentEmptyBinding? = null
private var currentDestinationLabel = ""
private val binding get() = _binding!!
// private val viewModel by lazy { viewModels<EvaluationResultViewModel>().value}
// private val viewModel by lazy { viewModels<EvaluationResultViewModel>().value}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -25,6 +29,22 @@ class EmptyFragment :Fragment(){
super.onViewCreated(view, savedInstanceState)
}
override fun onStart() {
super.onStart()
val currentDestination = findNavController().currentDestination
if (currentDestination?.label == "右侧空页面") {
currentDestinationLabel = "右侧空页面"
(activity as MainActivity).setRightSwitchButton(View.GONE)
}
}
override fun onStop() {
super.onStop()
if (currentDestinationLabel == "右侧空页面") {
(activity as MainActivity).setRightSwitchButton(View.VISIBLE)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null

View File

@@ -103,7 +103,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
* 读取元数据
*/
// val id = args.qsId
var id: String = ""
var id = ""
var signBean: SignBean? = null
var filePath: String = ""
arguments?.let {
@@ -235,7 +235,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
val controller = findNavController(R.id.main_activity_middle_fragment)
controller.currentDestination?.let {
//如果之前页面是空fragment直接打开面板
if (it.id == R.id.EmptyFragment) {
if (it.id == R.id.MiddleEmptyFragment) {
findNavController(
R.id.main_activity_middle_fragment
).navigate(R.id.PhenomenonFragment)
@@ -258,7 +258,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
val controller = findNavController(R.id.main_activity_middle_fragment)
controller.currentDestination?.let {
//如果之前页面是空fragment直接打开面板
if (it.id == R.id.EmptyFragment) {
if (it.id == R.id.MiddleEmptyFragment) {
findNavController(
R.id.main_activity_middle_fragment
).navigate(R.id.ProblemLinkFragment)
@@ -282,13 +282,13 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
}
fun voiceOnTouchStart() {
viewModel!!.startSoundMetter(requireActivity(), binding.evaluationVoice)
viewModel.startSoundMetter(requireActivity(), binding.evaluationVoice)
}
@RequiresApi(Build.VERSION_CODES.Q)
fun voiceOnTouchStop() {
if (Constant.IS_VIDEO_SPEED) {
viewModel!!.stopSoundMeter()
viewModel.stopSoundMeter()
}
}

View File

@@ -64,7 +64,7 @@ class EvaluationResultViewModel @Inject constructor(
/**
* 问题类型 liveData 给[MiddleAdapter]展示的数据
*/
val liveDataMiddleTypeList = MutableLiveData<List<String>>()
// val liveDataMiddleTypeList = MutableLiveData<List<String>>()
/**
* 问题现象 liveData 给[RightGroupHeaderAdapter]展示的数据
@@ -190,19 +190,22 @@ class EvaluationResultViewModel @Inject constructor(
list?.let {
if (list.isNotEmpty()) {
//通知页面更新
var classType = list[0]
liveDataLeftTypeList.postValue(it)
var classType = it[0]
if (bean != null) {
val classType2 = roomAppDatabase.getScProblemTypeDao()
.findClassTypeByCode(bean.elementCode)
if (classType2 != null)
if (classType2 != null) {
classType = classType2
}
}
//如果右侧栏没数据,给个默认值
if (liveDataQsRecordBean.value!!.classType.isEmpty()) {
liveDataQsRecordBean.value!!.classType = classType
classTypeTemp = classType
} else {
classType = liveDataQsRecordBean.value!!.classType
}
getProblemList(classType)
}
@@ -240,7 +243,7 @@ class EvaluationResultViewModel @Inject constructor(
Log.e("jingo", "getProblemLinkList ${rightList[0].text}")
}
liveDataQsRecordBean.postValue(liveDataQsRecordBean.value)
liveDataMiddleTypeList.postValue(middleList)
// liveDataMiddleTypeList.postValue(middleList)
liveDataRightTypeList.postValue(rightList)
}
}
@@ -272,7 +275,7 @@ class EvaluationResultViewModel @Inject constructor(
liveDataQsRecordBean.value!!.problemType = typeTitleList[0]
Log.e("jingo", "getProblemList ${typeTitleList[0]}")
}
liveDataMiddleTypeList.postValue(typeTitleList)
// liveDataMiddleTypeList.postValue(typeTitleList)
if (liveDataQsRecordBean.value!!.phenomenon.isEmpty()) {
liveDataQsRecordBean.value!!.phenomenon = phenomenonRightList[0].text
Log.e("jingo", "getProblemList ${phenomenonRightList[0].text}")
@@ -313,7 +316,7 @@ class EvaluationResultViewModel @Inject constructor(
fun saveData() {
viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance()
liveDataQsRecordBean.value!!.checkTime = DateTimeUtil.getDataTime()
liveDataQsRecordBean.value!!.checkTime = DateTimeUtil.getDataTime()
realm.executeTransaction {
it.copyToRealmOrUpdate(liveDataQsRecordBean.value)
}
@@ -444,7 +447,6 @@ class EvaluationResultViewModel @Inject constructor(
Constant.IS_VIDEO_SPEED = true
//录音动画
//录音动画
if (pop != null) {
pop!!.showAtLocation(v, Gravity.CENTER, 0, 0)
}

View File

@@ -28,13 +28,7 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
val bd = holder.viewBinding as TextItemSelectBinding
val title = data[position]
bd.itemId.text = title
if (selectTitle == title) {
bd.itemId.setBackgroundResource(R.drawable.shape_rect_white_2dp_bg)
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.highFontColor))
} else {
bd.itemId.setBackgroundResource(R.drawable.shape_rect_white_2dp_bg)
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.black))
}
holder.viewBinding.root.isSelected = selectTitle == title
bd.root.setOnClickListener {
if (selectTitle != title) {
selectTitle = title
@@ -50,10 +44,9 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
notifyDataSetChanged()
}
fun setRightTitle(title: String) {
fun setSelectTitle(title: String) {
if (title != selectTitle) {
selectTitle = title
notifyDataSetChanged()
}
}
}

View File

@@ -6,9 +6,12 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.OnScrollListener
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentPhenomenonBinding
import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.other.shareViewModels
@@ -19,6 +22,7 @@ class PhenomenonFragment :
BaseFragment() {
private var _binding: FragmentPhenomenonBinding? = null
private val binding get() = _binding!!
/**
* 和[PhenomenonFragment],[ProblemLinkFragment],[EvaluationResultFragment]共用同一个viewModel
*/
@@ -50,6 +54,7 @@ class PhenomenonFragment :
binding.phenomenonLeftRecyclerview.adapter = leftAdapter
//左侧菜单查询结果监听
viewModel.liveDataLeftTypeList.observe(viewLifecycleOwner) {
leftAdapter.setSelectTitle(viewModel.liveDataQsRecordBean.value!!.classType)
leftAdapter.refreshData(it)
}
@@ -63,6 +68,9 @@ class PhenomenonFragment :
*/
val rightAdapter = RightGroupHeaderAdapter { _, bean ->
viewModel.setPhenomenonMiddleBean(bean)
if (activity != null) {
requireActivity().findNavController(R.id.main_activity_middle_fragment).navigateUp()
}
}
binding.phenomenonRightRecyclerview.adapter = rightAdapter
//右侧菜单增加组标题
@@ -75,6 +83,7 @@ class PhenomenonFragment :
}
//右侧菜单查询数据监听
viewModel.liveDataRightTypeList.observe(viewLifecycleOwner) {
rightAdapter.setSelectTitle(viewModel.liveDataQsRecordBean.value!!.classType)
rightAdapter.refreshData(it)
}
@@ -106,15 +115,15 @@ class PhenomenonFragment :
})
//中间菜单
binding.phenomenonMiddleRecyclerview.setHasFixedSize(true)
binding.phenomenonMiddleRecyclerview.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
binding.phenomenonMiddleRecyclerview.adapter = middleAdapter
// //中间菜单
// binding.phenomenonMiddleRecyclerview.setHasFixedSize(true)
// binding.phenomenonMiddleRecyclerview.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
//
// binding.phenomenonMiddleRecyclerview.adapter = middleAdapter
//中间侧菜单查询结果监听
viewModel.liveDataMiddleTypeList.observe(viewLifecycleOwner) {
middleAdapter.refreshData(it)
}
// viewModel.liveDataMiddleTypeList.observe(viewLifecycleOwner) {
// middleAdapter.refreshData(it)
// }
// binding.phenomenonDrawer.setOnClickListener {
// when (binding.group.visibility) {
// View.INVISIBLE, View.GONE ->

View File

@@ -75,14 +75,14 @@ class ProblemLinkFragment : BaseFragment() {
}
})
//中间菜单
binding.linkMiddleRecyclerview.setHasFixedSize(true)
binding.linkMiddleRecyclerview.layoutManager = LinearLayoutManager(requireContext())
binding.linkMiddleRecyclerview.adapter = middleAdapter
// //中间菜单
// binding.linkMiddleRecyclerview.setHasFixedSize(true)
// binding.linkMiddleRecyclerview.layoutManager = LinearLayoutManager(requireContext())
// binding.linkMiddleRecyclerview.adapter = middleAdapter
//中间侧菜单查询结果监听
viewModel.liveDataMiddleTypeList.observe(viewLifecycleOwner) {
middleAdapter.refreshData(it)
}
// viewModel.liveDataMiddleTypeList.observe(viewLifecycleOwner) {
// middleAdapter.refreshData(it)
// }
binding.linkDrawer.setOnClickListener {
when (binding.group.visibility) {
View.INVISIBLE, View.GONE ->

View File

@@ -3,27 +3,35 @@ package com.navinfo.omqs.ui.fragment.evaluationresult
import android.view.LayoutInflater
import android.view.ViewGroup
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.TextItemSelectBinding
import com.navinfo.omqs.databinding.TextItemSelect2Binding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
class RightGroupHeaderAdapter(private var itemListener: ((Int, RightBean) -> Unit?)? = null) :
BaseRecyclerViewAdapter<RightBean>() {
private var selectTitle = ""
private var groupTitleList = mutableListOf<String>()
override fun getItemViewRes(position: Int): Int {
return R.layout.text_item_select
return R.layout.text_item_select2
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =
TextItemSelectBinding.inflate(LayoutInflater.from(parent.context), parent, false)
TextItemSelect2Binding.inflate(LayoutInflater.from(parent.context), parent, false)
return BaseViewHolder(viewBinding)
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val bd = holder.viewBinding as TextItemSelectBinding
bd.itemId.text = data[position].text
val bd = holder.viewBinding as TextItemSelect2Binding
val title = data[position].text
bd.itemId.text = title
holder.viewBinding.root.isSelected = selectTitle == title
bd.root.setOnClickListener {
if (selectTitle != title) {
selectTitle = title
notifyDataSetChanged()
}
itemListener?.invoke(position, data[position])
}
}
@@ -86,7 +94,6 @@ class RightGroupHeaderAdapter(private var itemListener: ((Int, RightBean) -> Uni
}
override fun refreshData(newData: List<RightBean>) {
super.refreshData(newData)
groupTitleList.clear()
for (item in newData) {
if (groupTitleList.size > 0) {
@@ -97,7 +104,15 @@ class RightGroupHeaderAdapter(private var itemListener: ((Int, RightBean) -> Uni
groupTitleList.add(item.title)
}
}
super.refreshData(newData)
}
/**
* 设置当前选中的哪条数据
*/
fun setSelectTitle(title: String) {
if (title != selectTitle) {
selectTitle = title
}
}
}

View File

@@ -40,7 +40,7 @@ class RightGroupHeaderDecoration(context: Context) : ItemDecoration() {
mTextPaint.textSize = 46f
mTextPaint.color = Color.WHITE
mLinePaint = Paint(Paint.ANTI_ALIAS_FLAG)
mLinePaint.color = Color.GRAY
mLinePaint.color = Color.WHITE
}
/**

View File

@@ -111,7 +111,7 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
viewModel.readRealmData()
// 定位到指定位置
niMapController.mMapView.vtmMap.animator()
.animateTo(GeoPoint(40.1012346774074730, 116.25571303257621))
.animateTo(GeoPoint(28.724637921467508 ,115.83412668023867 ))
}
R.id.personal_center_menu_task_list -> {
findNavController().navigate(R.id.TaskManagerFragment)

View File

@@ -12,32 +12,67 @@ class SignUtil {
*/
fun getSignIconText(data: RenderEntity): String {
return when (data.code) {
//道路功能等级
2002 -> getLinkFunctionClassText(data)
//道路种别
2008 -> getKindText(data)
//道路方向
2010 -> getRoadDirectionText(data)
//车道数
2041 -> getLaneNumText(data)
//常规点限速,条件点限速
4002, 4003 -> getSpeedLimitText(data)
// //道路种别
// 2008 -> getKindCodeIcon(data)
// //道路方向
// 2010 -> getRoadDirection(data)
// //车道数
// 2041 -> getLaneNumIcon(data)
else -> ""
}
}
fun getSignBottomText(data: RenderEntity): String {
/**
*获取道路功能等级文字
*/
private fun getLinkFunctionClassText(data: RenderEntity): String {
return "等级${data.properties["functionClass"]}"
}
/**
* 获取道路方向文字
*/
private fun getRoadDirectionText(data: RenderEntity): String {
val direct = data.properties["direct"]
when (direct?.toInt()) {
0 -> return "不应用"
1 -> return "双方向"
2 -> return "顺方向"
3 -> return "逆方向"
}
return ""
}
/**
* 获取车道数展示文字
*/
private fun getLaneNumText(data: RenderEntity): String {
return "${data.properties["laneNum"]}|${data.properties["laneS2e"]}|${data.properties["laneE2s"]}"
}
/**
* 获取要素名称
*/
fun getSignNameText(data: RenderEntity): String {
return when (data.code) {
//可变点限速
4004 -> "可变点限速"
//道路功能等级
2002 -> "功能等级"
//道路种别
2008 -> "种别"
//道路方向
2010 -> "方向"
//车道数
2041 -> "车道数"
//常规点限速
4002 -> "常规点限速"
//常点限速
4003 -> "条件点限速"
//道路种别
2008 -> "道路种别"
//道路方向
2010 -> "道路方向"
//车道数
2041 -> "车道数"
//可变点限速
4004 -> "可变点限速"
else -> ""
}
}
@@ -56,8 +91,7 @@ class SignUtil {
/**
* 条件点限速文字
*/
fun getConditionLimitText(data: RenderEntity): String {
private fun getConditionLimitText(data: RenderEntity): String {
var stringBuffer = StringBuffer()
try {
val dependent = data.properties["speedDependent"]
@@ -118,10 +152,17 @@ class SignUtil {
return ""
}
/**
* 获取种别名称
*/
private fun getKindText(data: RenderEntity): String {
return data.properties["kind"].toString()
}
/**
* 限速图标
*/
fun getSpeedLimitIcon(data: RenderEntity): Int {
private fun getSpeedLimitIcon(data: RenderEntity): Int {
try {
//限速标志 0 限速开始 1 限速解除
return when (data.properties["speed_flag"]) {
@@ -131,7 +172,23 @@ class SignUtil {
} catch (e: Exception) {
Log.e("jingo", "获取限速面板ICON出错2 $e")
}
return R.drawable.icon_speed_limit
return 0
}
/**
* 条件限速图标
*/
private fun getConditionalSpeedLimitIcon(data: RenderEntity): Int {
try {
//限速标志 0 限速开始 1 限速解除
return when (data.properties["speed_flag"]) {
"1" -> return R.drawable.icon_conditional_speed_limit_off
else -> return R.drawable.icon_conditional_speed_limit
}
} catch (e: Exception) {
Log.e("jingo", "获取限速面板ICON出错2 $e")
}
return 0
}
/**
@@ -140,17 +197,19 @@ class SignUtil {
fun getSignIcon(data: RenderEntity): Int {
return when (data.code) {
//道路种别
2008 -> getKindCodeIcon(data)
//道路方向
2010 -> getRoadDirection(data)
//车道数
2041 -> getLaneNumIcon(data)
//限速
4002, 4003 -> getSpeedLimitIcon(data)
// //道路种别
// 2008 -> getKindCodeIcon(data)
// //道路方向
// 2010 -> getRoadDirection(data)
// //车道数
// 2041 -> getLaneNumIcon(data)
//普通点限速
4002 -> getSpeedLimitIcon(data)
//条件点限速
4003 -> getConditionalSpeedLimitIcon(data)
//可变点限速
4004 -> R.drawable.icon_change_limit
else -> R.drawable.icon_speed_limit
else -> 0
}
}
@@ -159,7 +218,7 @@ class SignUtil {
/**
* 获取种别图标
*/
fun getKindCodeIcon(data: RenderEntity): Int {
private fun getKindCodeIcon(data: RenderEntity): Int {
try {
val kind = data.properties["kind"]
return when (kind!!.toInt()) {
@@ -186,7 +245,7 @@ class SignUtil {
/**
* 获取到路线
*/
fun getLaneNumIcon(data: RenderEntity): Int {
private fun getLaneNumIcon(data: RenderEntity): Int {
try {
val lineNum = data.properties["laneNum"]
return when (lineNum!!.toInt()) {
@@ -210,7 +269,7 @@ class SignUtil {
return R.drawable.icon_road_direction
}
fun getRoadDirection(data: RenderEntity): Int {
private fun getRoadDirection(data: RenderEntity): Int {
try {
val direct = data.properties["direct"]
return when (direct!!.toInt()) {

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@color/default_blue_text_color" />
<item android:color="@color/black" />
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/default_blue_text_color" android:state_selected="true"></item>
<item android:drawable="@color/black" />
</selector>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:shape="oval">
<size android:width="10dp" android:height="10dp" />
<solid android:color="@color/default_button_blue_color" />
</shape>
</item>
<item>
<shape android:shape="oval">
<size android:width="10dp" android:height="10dp" />
<solid android:color="@color/white" />
</shape>
</item>
</selector>

View File

@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- <padding-->
<!-- android:bottom="2dp"-->
<!-- android:left="2dp"-->
<!-- android:right="0dp"-->
<!-- android:top="2dp" />-->
<padding
android:bottom="2dp"
android:left="2dp"
android:right="2dp"
android:top="2dp" />
<solid android:color="#FFFFFF" />
<stroke
android:width="1dp"
android:color="#3756DF" />
<corners
android:bottomLeftRadius="4dp"
android:bottomLeftRadius="5dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="4dp"
android:topLeftRadius="5dp"
android:topRightRadius="0dp" />
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#BA0C122B" />
<corners
android:topLeftRadius="0dp"
android:topRightRadius="0dp"
android:bottomLeftRadius="6dp"
android:bottomRightRadius="6dp"/>
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#BA0C122B" />
<corners
android:bottomLeftRadius="6dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp" />
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#990C122B" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="6dp"
android:topRightRadius="0dp" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#BA0C122B" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#990C122B" />
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#BA0C122B" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="6dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp" />
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#990C122B" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="0dp"
android:topRightRadius="6dp" />
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#990C122B" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="6dp"
android:topRightRadius="6dp" />
</shape>

View File

@@ -51,6 +51,14 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_activity_top_sign_recyclerview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/main_activity_person_center"
@@ -136,9 +144,8 @@
<ImageButton
android:id="@+id/main_activity_fragment_switch"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginRight="-10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/selector_fragment_switch"
android:elevation="2dp"
android:onClick="@{()->mainActivity.onSwitchFragment()}"
@@ -259,8 +266,8 @@
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="323dp"
android:layout_height="match_parent"
android:layout_marginTop="30dp"
android:layout_gravity="left"
android:layout_marginTop="30dp"
app:navGraph="@navigation/left_drawer_nav_graph" />
</androidx.drawerlayout.widget.DrawerLayout>

View File

@@ -0,0 +1,54 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="70dp"
android:layout_height="match_parent"
tools:context="com.navinfo.omqs.ui.activity.map.TopSignAdapter">
<TextView
android:id="@+id/top_sign_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="0.5dp"
android:gravity="center"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:text="名称"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/top_sign_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/top_sign_name"
android:layout_alignLeft="@id/top_sign_name"
android:layout_alignRight="@id/top_sign_name"
android:layout_centerHorizontal="true"
android:gravity="center"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:text="道路名"
android:textColor="@color/white"
android:textSize="18sp" />
<View
android:id="@+id/top_sign_left_line"
android:layout_width="0.5dp"
android:layout_height="wrap_content"
android:layout_alignTop="@id/top_sign_text"
android:layout_alignBottom="@id/top_sign_text"
android:background="#0C122B"
android:visibility="gone" />
<View
android:id="@+id/top_sign_right_line"
android:layout_width="0.5dp"
android:layout_height="wrap_content"
android:layout_alignTop="@id/top_sign_text"
android:layout_alignBottom="@id/top_sign_text"
android:layout_alignParentRight="true"
android:background="#0C122B"
android:visibility="gone" />
</RelativeLayout>

View File

@@ -18,31 +18,30 @@
<!-- android:paddingBottom="30dp"-->
<!-- android:src="@drawable/btn_back_xml" />-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/phenomenon_middle_recyclerview"
android:layout_width="0dp"
android:layout_height="35dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/phenomenon_right_recyclerview"
app:layout_constraintTop_toTopOf="parent" />
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/phenomenon_middle_recyclerview"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="35dp"-->
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
<!-- app:layout_constraintRight_toLeftOf="@id/phenomenon_right_recyclerview"-->
<!-- app:layout_constraintTop_toTopOf="parent" />-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/phenomenon_left_recyclerview"
android:layout_width="0dp"
android:layout_width="148dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/phenomenon_right_recyclerview"
app:layout_constraintTop_toBottomOf="@id/phenomenon_middle_recyclerview" />
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/phenomenon_right_recyclerview"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/phenomenon_left_recyclerview"
app:layout_constraintRight_toRightOf="parent" />
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- <LinearLayout-->
<!-- android:id="@+id/group"-->

View File

@@ -1,20 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_layout"
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:background="@drawable/selector_adapter_item_select_bg">
<TextView
android:id="@+id/item_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:padding = "3dp"
android:layout_margin="4dp"
android:gravity="center"
android:textColor="@color/black"
android:textSize="18sp">
android:padding="4dp"
android:drawablePadding="10dp"
android:drawableLeft="@drawable/selector_text_drawable_left_white_blue"
android:textColor="@color/selector_black_blue_color"
android:textSize="14sp"/>
</TextView>
</RelativeLayout>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_adapter_item_select_bg">
<TextView
android:id="@+id/item_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:gravity="center_vertical"
android:padding="4dp"
android:textColor="@color/selector_black_blue_color"
android:textSize="14sp"/>
</RelativeLayout>

View File

@@ -2,12 +2,12 @@
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/EmptyFragment">
app:startDestination="@id/MiddleEmptyFragment">
<fragment
android:id="@+id/EmptyFragment"
android:id="@+id/MiddleEmptyFragment"
android:name="com.navinfo.omqs.ui.fragment.empty.EmptyFragment"
android:label="空页面"
android:label="中间空页面"
tools:layout="@layout/fragment_empty"></fragment>
<fragment

View File

@@ -3,24 +3,24 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/right_fragment_nav_graph"
app:startDestination="@id/EmptyFragment">
app:startDestination="@id/RightEmptyFragment">
<fragment
android:id="@+id/EmptyFragment"
android:id="@+id/RightEmptyFragment"
android:name="com.navinfo.omqs.ui.fragment.empty.EmptyFragment"
android:label="空页面"
android:label="右侧空页面"
tools:layout="@layout/fragment_empty">
<!-- <action-->
<!-- android:id="@+id/EmptyFragment_to_EvaluationResultFragment"-->
<!-- app:destination="@id/EvaluationResultFragment" />-->
<!-- <argument-->
<!-- android:name="QsId"-->
<!-- app:argType="string"-->
<!-- app:nullable="true" />-->
<!-- <argument-->
<!-- android:name="SignBean"-->
<!-- app:argType="com.navinfo.omqs.ui.activity.map.SignBean"-->
<!-- />-->
<!-- <action-->
<!-- android:id="@+id/EmptyFragment_to_EvaluationResultFragment"-->
<!-- app:destination="@id/EvaluationResultFragment" />-->
<!-- <argument-->
<!-- android:name="QsId"-->
<!-- app:argType="string"-->
<!-- app:nullable="true" />-->
<!-- <argument-->
<!-- android:name="SignBean"-->
<!-- app:argType="com.navinfo.omqs.ui.activity.map.SignBean"-->
<!-- />-->
</fragment>
<fragment

View File

@@ -8,5 +8,5 @@
<dimen name="right_fragment_w" comment="右侧fragment宽度">256dp</dimen>
<dimen name="main_activity_geometry_w" comment="地图主页坐标框宽度">230dp</dimen>
<dimen name="main_activity_geometry_h" comment="地图主页坐标框高度">28dp</dimen>
<dimen name="fragment_phenomenon_width" comment="问题现象面板宽度">360dp</dimen>
</resources>

View File

@@ -1,4 +1,4 @@
<resources>
<dimen name="fab_margin">48dp</dimen>
<dimen name="fragment_phenomenon_width" comment="问题现象面板宽度">310dp</dimen>
<dimen name="fragment_phenomenon_width" comment="问题现象面板宽度">360dp</dimen>
</resources>

View File

@@ -8,9 +8,14 @@ buildscript {
}
}
plugins {
id 'com.android.application' version '7.3.1' apply false
id 'com.android.library' version '7.3.1' apply false
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
id 'com.google.dagger.hilt.android' version '2.44' apply false
}
static def androidCompileSdk() { return 33 }
allprojects {
ext.gdxVersion = "1.11.0"
ext.gwtVersion = "2.8.2"
ext.slf4jVersion = "1.7.28"
}

View File

@@ -45,6 +45,12 @@ android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
file("../vtm/vtm-android/natives").eachDir() { dir ->
jniLibs.srcDirs += "${dir.path}/lib"
}
file("../vtm/vtm-android-gdx/natives").eachDir() { dir ->
jniLibs.srcDirs += "${dir.path}/lib"
}
}
}
}
@@ -72,25 +78,34 @@ dependencies {
// VTM依赖
implementation "net.sf.kxml:kxml2:2.3.0"
implementation 'org.slf4j:slf4j-api:2.0.7'
api "org.mapsforge:vtm:$vtmVersion"
implementation "org.mapsforge:vtm-themes:$vtmVersion"
implementation "org.mapsforge:vtm-android:$vtmVersion"
runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-armeabi-v7a"
runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-arm64-v8a"
runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86"
runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86_64"
implementation "org.mapsforge:vtm-http:$vtmVersion"
implementation project(":vtm-themes")
implementation project(":vtm-android")
implementation project(':vtm-extras')
implementation project(":vtm-http")
// implementation "org.mapsforge:vtm-themes:$vtmVersion"
// implementation "org.mapsforge:vtm-android:$vtmVersion"
// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-armeabi-v7a"
// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-arm64-v8a"
// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86"
// runtimeOnly "org.mapsforge:vtm-android:$vtmVersion:natives-x86_64"
// implementation "org.mapsforge:vtm-http:$vtmVersion"
implementation "org.mapsforge:vtm-json:$vtmVersion"
implementation "org.mapsforge:vtm-gdx:$vtmVersion"
implementation "org.mapsforge:vtm-android-mvt:$vtmVersion"
implementation "org.mapsforge:vtm-mvt:$vtmVersion"
implementation project(":vtm-json")
// implementation project(":vtm-gdx")
// implementation project(":vtm-gdx-poi3d")
implementation project(":vtm-android-mvt")
implementation project(":vtm-mvt")
// implementation "org.mapsforge:vtm-json:$vtmVersion"
// implementation "org.mapsforge:vtm-gdx:$vtmVersion"
// implementation "org.mapsforge:vtm-android-mvt:$vtmVersion"
// implementation "org.mapsforge:vtm-mvt:$vtmVersion"
runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-armeabi-v7a"
runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-arm64-v8a"
runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86"
runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86_64"
implementation "org.mapsforge:vtm-android-gdx:$vtmVersion"
// implementation project(":vtm-android-gdx")
// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-armeabi-v7a"
// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-arm64-v8a"
// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86"
// runtimeOnly "org.mapsforge:vtm-android-gdx:$vtmVersion:natives-x86_64"
// implementation "org.mapsforge:vtm-android-gdx:$vtmVersion"
implementation "com.google.protobuf:protobuf-java:3.6.1"
implementation "com.wdtinc:mapbox-vector-tile:3.1.0"
@@ -98,7 +113,8 @@ dependencies {
implementation "com.badlogicgames.gdx:gdx:1.11.0"
implementation "com.badlogicgames.gdx:gdx-backend-android:1.11.0"
implementation "com.caverock:androidsvg:1.4"
api "org.mapsforge:vtm-jts:$vtmVersion"
// api "org.mapsforge:vtm-jts:$vtmVersion"
api project(":vtm-jts")
api 'org.locationtech.jts:jts-core:1.19.0'
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.11'
implementation 'com.squareup.okio:okio:3.3.0'

View File

@@ -1860,7 +1860,7 @@
<m k="direct">
<m v="2">
<!-- <lineSymbol src="assets:omdb/oneway_right.svg"></lineSymbol>-->
<symbol src="assets:omdb/oneway_right.svg" repeat-start="99.9" repeat="false" ></symbol>
<symbol src="assets:omdb/oneway_right.svg" ></symbol>
</m>
<m v="3">
<!-- <lineSymbol src="assets:omdb/oneway_left.svg"></lineSymbol>-->
@@ -1868,5 +1868,13 @@
</m>
</m>
</m>
<!--交通灯-->
<m v="OMDB_TRAFFICLIGHT">
<symbol src="assets:omdb/icon_4022_0.png" repeat="false" symbol-width="14" symbol-height="40" rotate="false"></symbol>
</m>
<!--普通交限-->
<m v="OMDB_RESTRICTION">
<symbol src="assets:omdb/icon_4006_0.png" repeat="false" symbol-width="46" symbol-height="46" rotate="false"></symbol>
</m>
</m>
</rendertheme>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,6 +1,6 @@
#Tue Mar 21 10:15:37 CST 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

View File

@@ -30,5 +30,46 @@ dependencyResolutionManagement {
}
}
rootProject.name = "OMQualityInspection"
include ':app'
include ':collect-library'
//include ':vtm:vtm'
//include ':vtm:vtm-android'
//include ':vtm:vtm-android-gdx'
//include ':vtm:vtm-android-mvt'
//include ':vtm:vtm-extras'
//include ':vtm:vtm-gdx'
//include ':vtm:vtm-gdx-poi3d'
//include ':vtm:vtm-http'
//include ':vtm:vtm-json'
//include ':vtm:vtm-jts'
//include ':vtm:vtm-models'
//include ':vtm:vtm-mvt'
//include ':vtm:vtm-theme-comparator'
//include ':vtm:vtm-themes'
include ':vtm'
include ':vtm-models'
include ':vtm-themes'
include ':vtm-android-mvt'
include ':vtm-android-gdx'
include ':vtm-android'
include ':vtm-mvt'
include ':vtm-gdx'
include ':vtm-jts'
include ':vtm-http'
include ':vtm-json'
include ':vtm-extras'
include ':vtm-gdx-poi3d'
project(':vtm').projectDir = new File(rootDir, 'vtm/vtm/')
project(':vtm-models').projectDir = new File(rootDir, 'vtm/vtm-models/')
project(':vtm-themes').projectDir = new File(rootDir, 'vtm/vtm-themes/')
project(':vtm-android-mvt').projectDir = new File(rootDir, 'vtm/vtm-android-mvt/')
project(':vtm-android-gdx').projectDir = new File(rootDir, 'vtm/vtm-android-gdx/')
project(':vtm-android').projectDir = new File(rootDir, 'vtm/vtm-android/')
project(':vtm-mvt').projectDir = new File(rootDir, 'vtm/vtm-mvt/')
project(':vtm-gdx').projectDir = new File(rootDir, 'vtm/vtm-gdx/')
project(':vtm-jts').projectDir = new File(rootDir, 'vtm/vtm-jts/')
project(':vtm-http').projectDir = new File(rootDir, 'vtm/vtm-http/')
project(':vtm-json').projectDir = new File(rootDir, 'vtm/vtm-json/')
project(':vtm-extras').projectDir = new File(rootDir, 'vtm/vtm-extras/')
project(':vtm-gdx-poi3d').projectDir = new File(rootDir, 'vtm/vtm-gdx-poi3d/')

1
vtm Submodule

Submodule vtm added at dd13e533c3