Merge branch 'master' of gitlab.navinfo.com:CollectVehicle/OneMapQS
Conflicts: app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
This commit is contained in:
commit
611385c145
@ -62,8 +62,6 @@ class Constant {
|
|||||||
|
|
||||||
const val MESSAGE_PAGE_SIZE = 30 //消息列表一页最多数量
|
const val MESSAGE_PAGE_SIZE = 30 //消息列表一页最多数量
|
||||||
|
|
||||||
lateinit var realm: Realm
|
|
||||||
|
|
||||||
//选择相机默认或者外设
|
//选择相机默认或者外设
|
||||||
const val SELECT_CAMERA_STATE = "select_camera_state"
|
const val SELECT_CAMERA_STATE = "select_camera_state"
|
||||||
|
|
||||||
@ -85,7 +83,10 @@ class Constant {
|
|||||||
|
|
||||||
const val OMDB_CONFIG = "omdb.config"
|
const val OMDB_CONFIG = "omdb.config"
|
||||||
const val OTHER_CONFIG = "other.config"
|
const val OTHER_CONFIG = "other.config"
|
||||||
const val LAYER_MANAGER_CONFIG = "LAYER_MANAGER_CONFIG" // 图层管理界面缓存的key
|
|
||||||
|
val OMDB_LAYER_VISIBLE_LIST: MutableList<String> = mutableListOf() // 记录OMDB数据显示的图层名称列表
|
||||||
|
|
||||||
|
const val EVENT_LAYER_MANAGER_CHANGE = "EVENT_LAYER_MANAGER_CHANGE" // 图层管理中的配置修改
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
44
app/src/main/java/com/navinfo/omqs/tools/LayerConfigUtils.kt
Normal file
44
app/src/main/java/com/navinfo/omqs/tools/LayerConfigUtils.kt
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package com.navinfo.omqs.tools
|
||||||
|
|
||||||
|
import com.blankj.utilcode.util.FileIOUtils
|
||||||
|
import com.blankj.utilcode.util.SPStaticUtils
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.google.gson.reflect.TypeToken
|
||||||
|
import com.navinfo.omqs.Constant
|
||||||
|
import com.navinfo.omqs.bean.ImportConfig
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
class LayerConfigUtils {
|
||||||
|
companion object {
|
||||||
|
private val omdbConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OMDB_CONFIG)
|
||||||
|
private val otherConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OTHER_CONFIG)
|
||||||
|
private val gson = Gson()
|
||||||
|
|
||||||
|
fun getLayerConfigList(): List<ImportConfig> {
|
||||||
|
// 首先读取Shared文件,如果存在则直接返回,否则读取config文件
|
||||||
|
return SPStaticUtils.getString(Constant.EVENT_LAYER_MANAGER_CHANGE, null).let {
|
||||||
|
if (this!=null) {
|
||||||
|
val result: List<ImportConfig> = gson.fromJson(it, object : TypeToken<List<ImportConfig>>(){}.type)
|
||||||
|
result
|
||||||
|
} else {
|
||||||
|
LayerConfigUtils.getLayerConfigListFromAssetsFile()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getLayerConfigListFromAssetsFile(): List<ImportConfig> {
|
||||||
|
val resultList = mutableListOf<ImportConfig>()
|
||||||
|
if (omdbConfigFile.exists()) {
|
||||||
|
val omdbConfiStr = FileIOUtils.readFile2String(omdbConfigFile)
|
||||||
|
val omdbConfig = gson.fromJson<ImportConfig>(omdbConfiStr, ImportConfig::class.java)
|
||||||
|
resultList.add(omdbConfig)
|
||||||
|
}
|
||||||
|
if (otherConfigFile.exists()) {
|
||||||
|
val otherConfiStr = FileIOUtils.readFile2String(otherConfigFile)
|
||||||
|
val otherConfig = gson.fromJson<ImportConfig>(otherConfiStr, ImportConfig::class.java)
|
||||||
|
resultList.add(otherConfig)
|
||||||
|
}
|
||||||
|
return resultList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,16 +9,24 @@ import androidx.activity.viewModels
|
|||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.databinding.DataBindingUtil
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import com.blankj.utilcode.util.SPStaticUtils
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.google.gson.reflect.TypeToken
|
||||||
import com.navinfo.collect.library.map.NIMapController
|
import com.navinfo.collect.library.map.NIMapController
|
||||||
import com.navinfo.omqs.Constant
|
import com.navinfo.omqs.Constant
|
||||||
import com.navinfo.omqs.R
|
import com.navinfo.omqs.R
|
||||||
|
import com.navinfo.omqs.bean.ImportConfig
|
||||||
import com.navinfo.omqs.databinding.ActivityMainBinding
|
import com.navinfo.omqs.databinding.ActivityMainBinding
|
||||||
import com.navinfo.omqs.http.offlinemapdownload.OfflineMapDownloadManager
|
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.activity.BaseActivity
|
||||||
import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration
|
import com.navinfo.omqs.util.FlowEventBus
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration
|
||||||
import org.videolan.vlc.Util
|
import org.videolan.vlc.Util
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -62,6 +70,7 @@ class MainActivity : BaseActivity() {
|
|||||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
|
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
|
||||||
|
|
||||||
//初始化地图
|
//初始化地图
|
||||||
mapController.init(
|
mapController.init(
|
||||||
this,
|
this,
|
||||||
@ -70,6 +79,8 @@ class MainActivity : BaseActivity() {
|
|||||||
Constant.MAP_PATH,
|
Constant.MAP_PATH,
|
||||||
Constant.USER_DATA_PATH + "/trace.sqlite"
|
Constant.USER_DATA_PATH + "/trace.sqlite"
|
||||||
)
|
)
|
||||||
|
// 在mapController初始化前获取当前OMDB图层显隐
|
||||||
|
viewModel.refreshOMDBLayer(LayerConfigUtils.getLayerConfigList())
|
||||||
//关联生命周期
|
//关联生命周期
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = this
|
||||||
//给xml转递对象
|
//给xml转递对象
|
||||||
@ -113,6 +124,13 @@ class MainActivity : BaseActivity() {
|
|||||||
viewModel.liveDataSignList.observe(this) {
|
viewModel.liveDataSignList.observe(this) {
|
||||||
signAdapter.refreshData(it)
|
signAdapter.refreshData(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
// 初始化地图图层控制接收器
|
||||||
|
FlowEventBus.subscribe<List<ImportConfig>>(lifecycle, Constant.EVENT_LAYER_MANAGER_CHANGE) {
|
||||||
|
viewModel.refreshOMDBLayer(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
|
@ -29,6 +29,7 @@ import com.navinfo.collect.library.utils.GeometryTools
|
|||||||
import com.navinfo.collect.library.utils.GeometryToolsKt
|
import com.navinfo.collect.library.utils.GeometryToolsKt
|
||||||
import com.navinfo.omqs.Constant
|
import com.navinfo.omqs.Constant
|
||||||
import com.navinfo.omqs.R
|
import com.navinfo.omqs.R
|
||||||
|
import com.navinfo.omqs.bean.ImportConfig
|
||||||
import com.navinfo.omqs.bean.SignBean
|
import com.navinfo.omqs.bean.SignBean
|
||||||
import com.navinfo.omqs.bean.TaskBean
|
import com.navinfo.omqs.bean.TaskBean
|
||||||
import com.navinfo.omqs.db.RealmOperateHelper
|
import com.navinfo.omqs.db.RealmOperateHelper
|
||||||
@ -36,12 +37,14 @@ import com.navinfo.omqs.ui.dialog.CommonDialog
|
|||||||
import com.navinfo.omqs.ui.manager.TakePhotoManager
|
import com.navinfo.omqs.ui.manager.TakePhotoManager
|
||||||
import com.navinfo.omqs.ui.widget.SignUtil
|
import com.navinfo.omqs.ui.widget.SignUtil
|
||||||
import com.navinfo.omqs.util.DateTimeUtil
|
import com.navinfo.omqs.util.DateTimeUtil
|
||||||
|
import com.navinfo.omqs.util.FlowEventBus
|
||||||
import com.navinfo.omqs.util.SoundMeter
|
import com.navinfo.omqs.util.SoundMeter
|
||||||
import com.navinfo.omqs.util.SpeakMode
|
import com.navinfo.omqs.util.SpeakMode
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import io.realm.RealmSet
|
import io.realm.RealmSet
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.collect
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.oscim.core.GeoPoint
|
import org.oscim.core.GeoPoint
|
||||||
@ -340,6 +343,24 @@ class MainViewModel @Inject constructor(
|
|||||||
if (pop != null && pop!!.isShowing) pop!!.dismiss()
|
if (pop != null && pop!!.isShowing) pop!!.dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 刷新OMDB图层显隐
|
||||||
|
* */
|
||||||
|
fun refreshOMDBLayer(layerConfigList: List<ImportConfig>) {
|
||||||
|
// 根据获取到的配置信息,筛选未勾选的图层名称
|
||||||
|
if (layerConfigList!=null && !layerConfigList.isEmpty()) {
|
||||||
|
val omdbVisibleList = layerConfigList.filter { importConfig->
|
||||||
|
importConfig.tableGroupName == "OMDB数据"
|
||||||
|
}.first().tables.filter { tableInfo ->
|
||||||
|
!tableInfo.checked
|
||||||
|
}.map {
|
||||||
|
tableInfo -> tableInfo.table
|
||||||
|
}.toList()
|
||||||
|
com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = omdbVisibleList.toTypedArray()
|
||||||
|
// 刷新地图
|
||||||
|
mapController.mMapView.vtmMap.clearMap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理页面调转
|
* 处理页面调转
|
||||||
|
@ -4,13 +4,12 @@ import android.content.Context
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.BaseExpandableListAdapter
|
import android.widget.*
|
||||||
import android.widget.CheckBox
|
|
||||||
import com.navinfo.omqs.R
|
import com.navinfo.omqs.R
|
||||||
import com.navinfo.omqs.bean.ImportConfig
|
import com.navinfo.omqs.bean.ImportConfig
|
||||||
import com.navinfo.omqs.bean.TableInfo
|
import com.navinfo.omqs.bean.TableInfo
|
||||||
|
|
||||||
class LayerManagerExpandableListAdapter(private val context: Context, private val parentItems: List<ImportConfig>) :
|
class LayerManagerExpandableListAdapter(private val context: Context, val parentItems: List<ImportConfig>) :
|
||||||
BaseExpandableListAdapter() {
|
BaseExpandableListAdapter() {
|
||||||
|
|
||||||
override fun getGroupCount(): Int {
|
override fun getGroupCount(): Int {
|
||||||
@ -30,7 +29,6 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
|
|||||||
return parentItems[groupPosition].tables[childPosition]
|
return parentItems[groupPosition].tables[childPosition]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun getGroupId(groupPosition: Int): Long = groupPosition.toLong()
|
override fun getGroupId(groupPosition: Int): Long = groupPosition.toLong()
|
||||||
|
|
||||||
override fun getChildId(groupPosition: Int, childPosition: Int): Long = childPosition.toLong()
|
override fun getChildId(groupPosition: Int, childPosition: Int): Long = childPosition.toLong()
|
||||||
@ -56,14 +54,18 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
|
|||||||
}
|
}
|
||||||
|
|
||||||
val parentItem = getGroup(groupPosition) as ImportConfig
|
val parentItem = getGroup(groupPosition) as ImportConfig
|
||||||
viewHolder.parentCheckBox.text = parentItem.tableGroupName
|
viewHolder.parentName.text = parentItem.tableGroupName
|
||||||
viewHolder.parentCheckBox.isChecked = parentItem.checked
|
viewHolder.parentCheckBox.isChecked = parentItem.checked
|
||||||
viewHolder.parentCheckBox.setOnCheckedChangeListener { _, isChecked ->
|
viewHolder.parentCheckBox.setOnClickListener {
|
||||||
parentItem.checked = isChecked
|
parentItem.checked = !parentItem.checked
|
||||||
parentItem.tables.forEach { it.checked = isChecked }
|
parentItem.tables.forEach { it.checked = parentItem.checked }
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
if (isExpanded) {
|
||||||
|
viewHolder.imgGroupIndicator.setImageResource(R.drawable.ic_baseline_keyboard_arrow_down_24)
|
||||||
|
} else {
|
||||||
|
viewHolder.imgGroupIndicator.setImageResource(R.drawable.ic_baseline_keyboard_arrow_right_24)
|
||||||
|
}
|
||||||
return view!!
|
return view!!
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,10 +89,10 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
|
|||||||
}
|
}
|
||||||
|
|
||||||
val childItem = getChild(groupPosition, childPosition) as TableInfo
|
val childItem = getChild(groupPosition, childPosition) as TableInfo
|
||||||
viewHolder.childCheckBox.text = childItem.name
|
viewHolder.childName.text = childItem.name
|
||||||
viewHolder.childCheckBox.isChecked = childItem.checked
|
viewHolder.childCheckBox.isChecked = childItem.checked
|
||||||
viewHolder.childCheckBox.setOnCheckedChangeListener { _, isChecked ->
|
viewHolder.childCheckBox.setOnClickListener {
|
||||||
childItem.checked = isChecked
|
childItem.checked = !childItem.checked
|
||||||
parentItems[groupPosition].checked = parentItems[groupPosition].tables.all { it.checked }
|
parentItems[groupPosition].checked = parentItems[groupPosition].tables.all { it.checked }
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
@ -102,9 +104,12 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
|
|||||||
|
|
||||||
internal class ParentViewHolder(view: View) {
|
internal class ParentViewHolder(view: View) {
|
||||||
val parentCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_parent)
|
val parentCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_parent)
|
||||||
|
val parentName: TextView = view.findViewById(R.id.tv_layermanager_parent_name)
|
||||||
|
val imgGroupIndicator: ImageView = view.findViewById(R.id.img_group_indicator)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class ChildViewHolder(view: View) {
|
internal class ChildViewHolder(view: View) {
|
||||||
val childCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_child)
|
val childCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_child)
|
||||||
|
val childName: TextView = view.findViewById(R.id.tv_layermanager_child_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,47 +1,32 @@
|
|||||||
package com.navinfo.omqs.ui.fragment.layermanager
|
package com.navinfo.omqs.ui.fragment.layermanager
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.blankj.utilcode.util.FileIOUtils
|
import com.blankj.utilcode.util.FileIOUtils
|
||||||
import com.blankj.utilcode.util.SPStaticUtils
|
import com.blankj.utilcode.util.SPStaticUtils
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import com.navinfo.omqs.Constant
|
import com.navinfo.omqs.Constant
|
||||||
import com.navinfo.omqs.bean.ImportConfig
|
import com.navinfo.omqs.bean.ImportConfig
|
||||||
|
import com.navinfo.omqs.tools.LayerConfigUtils
|
||||||
|
import com.navinfo.omqs.util.FlowEventBus
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class LayerManagerViewModel(): ViewModel() {
|
class LayerManagerViewModel(): ViewModel() {
|
||||||
private val omdbConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OMDB_CONFIG)
|
|
||||||
private val otherConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OTHER_CONFIG)
|
|
||||||
private val gson = Gson()
|
private val gson = Gson()
|
||||||
|
|
||||||
fun getLayerConfigList(): List<ImportConfig> {
|
fun getLayerConfigList(): List<ImportConfig> {
|
||||||
// 首先读取Shared文件,如果存在则直接返回,否则读取config文件
|
// 首先读取Shared文件,如果存在则直接返回,否则读取config文件
|
||||||
val importConfigList = with(SPStaticUtils.getString(Constant.LAYER_MANAGER_CONFIG, null)) {
|
return LayerConfigUtils.getLayerConfigList()
|
||||||
if (this!=null) {
|
|
||||||
gson.fromJson(this, object : TypeToken<List<ImportConfig>>(){}.type)
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (importConfigList==null) {
|
fun saveLayerConfigList(listData: List<ImportConfig>) {
|
||||||
return getLayerConfigListFromAssetsFile()
|
SPStaticUtils.put(Constant.EVENT_LAYER_MANAGER_CHANGE, gson.toJson(listData))
|
||||||
} else {
|
// 发送新的配置数据
|
||||||
return importConfigList as List<ImportConfig>
|
viewModelScope.launch {
|
||||||
|
FlowEventBus.post(Constant.EVENT_LAYER_MANAGER_CHANGE, listData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getLayerConfigListFromAssetsFile(): List<ImportConfig> {
|
|
||||||
val resultList = mutableListOf<ImportConfig>()
|
|
||||||
if (omdbConfigFile.exists()) {
|
|
||||||
val omdbConfiStr = FileIOUtils.readFile2String(omdbConfigFile)
|
|
||||||
val omdbConfig = gson.fromJson<ImportConfig>(omdbConfiStr, ImportConfig::class.java)
|
|
||||||
resultList.add(omdbConfig)
|
|
||||||
}
|
|
||||||
if (otherConfigFile.exists()) {
|
|
||||||
val otherConfiStr = FileIOUtils.readFile2String(otherConfigFile)
|
|
||||||
val otherConfig = gson.fromJson<ImportConfig>(otherConfiStr, ImportConfig::class.java)
|
|
||||||
resultList.add(otherConfig)
|
|
||||||
}
|
|
||||||
return resultList
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -6,11 +6,15 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
|
import androidx.navigation.fragment.findNavController
|
||||||
|
import com.blankj.utilcode.util.SPStaticUtils
|
||||||
|
import com.navinfo.omqs.Constant
|
||||||
import com.navinfo.omqs.databinding.FragmentEmptyBinding
|
import com.navinfo.omqs.databinding.FragmentEmptyBinding
|
||||||
import com.navinfo.omqs.databinding.FragmentLayerManagerBinding
|
import com.navinfo.omqs.databinding.FragmentLayerManagerBinding
|
||||||
|
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||||
import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapCityListViewModel
|
import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapCityListViewModel
|
||||||
|
|
||||||
class LayermanagerFragment :Fragment(){
|
class LayermanagerFragment : BaseFragment(){
|
||||||
private var _binding: FragmentLayerManagerBinding? = null
|
private var _binding: FragmentLayerManagerBinding? = null
|
||||||
|
|
||||||
private val binding get() = _binding!!
|
private val binding get() = _binding!!
|
||||||
@ -28,6 +32,26 @@ class LayermanagerFragment :Fragment(){
|
|||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
val adapter = LayerManagerExpandableListAdapter(requireContext(), viewModel.getLayerConfigList())
|
val adapter = LayerManagerExpandableListAdapter(requireContext(), viewModel.getLayerConfigList())
|
||||||
binding.elvLayerManager.setAdapter(adapter)
|
binding.elvLayerManager.setAdapter(adapter)
|
||||||
|
// 默认显示第一个父项下的子类
|
||||||
|
binding.elvLayerManager.expandGroup(0)
|
||||||
|
binding.elvLayerManager.setGroupIndicator(null)
|
||||||
|
binding.elvLayerManager.setOnGroupClickListener { expandableListView, view, groupPosition, l ->
|
||||||
|
if (expandableListView.isGroupExpanded(groupPosition)) {
|
||||||
|
binding.elvLayerManager.collapseGroup(groupPosition)
|
||||||
|
} else {
|
||||||
|
binding.elvLayerManager.expandGroup(groupPosition)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.imgBack.setOnClickListener {
|
||||||
|
findNavController().navigateUp()
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.tvTitle.text = findNavController().currentDestination?.label
|
||||||
|
|
||||||
|
binding.imgConfirm.setOnClickListener { // 用户点击确认,重新设置当前的图层显隐控制
|
||||||
|
viewModel.saveLayerConfigList(adapter.parentItems)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
73
app/src/main/java/com/navinfo/omqs/util/FlowEventBus.kt
Normal file
73
app/src/main/java/com/navinfo/omqs/util/FlowEventBus.kt
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package com.navinfo.omqs.util
|
||||||
|
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
|
import kotlinx.coroutines.flow.SharedFlow
|
||||||
|
|
||||||
|
object FlowEventBus {
|
||||||
|
private val bus: HashMap<String, MutableSharedFlow<out Any>> = hashMapOf()
|
||||||
|
|
||||||
|
private fun <T : Any> with(key: String): MutableSharedFlow<T> {
|
||||||
|
if (!bus.containsKey(key)) {
|
||||||
|
val flow = MutableSharedFlow<T>()
|
||||||
|
bus[key] = flow
|
||||||
|
}
|
||||||
|
return bus[key] as MutableSharedFlow<T>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对外只暴露SharedFlow
|
||||||
|
* @param action String
|
||||||
|
* @return SharedFlow<T>
|
||||||
|
*/
|
||||||
|
fun <T> getFlow(action: String): SharedFlow<T> {
|
||||||
|
return with(action)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 挂起函数
|
||||||
|
* @param action String
|
||||||
|
* @param data T
|
||||||
|
*/
|
||||||
|
suspend fun <T : Any> post(action: String, data: T) {
|
||||||
|
with<T>(action).emit(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 详见tryEmit和emit的区别
|
||||||
|
* @param action String
|
||||||
|
* @param data T
|
||||||
|
* @return Boolean
|
||||||
|
*/
|
||||||
|
fun <T : Any> tryPost(action: String, data: T): Boolean {
|
||||||
|
return with<T>(action).tryEmit(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sharedFlow会长久持有,所以要加声明周期限定,不然会出现内存溢出
|
||||||
|
* @param lifecycle Lifecycle
|
||||||
|
* @param action String
|
||||||
|
* @param block Function1<T, Unit>
|
||||||
|
*/
|
||||||
|
suspend fun <T : Any> subscribe(lifecycle: Lifecycle, action: String, block: (T) -> Unit) {
|
||||||
|
lifecycle.repeatOnLifecycle(Lifecycle.State.CREATED) {
|
||||||
|
with<T>(action).collect {
|
||||||
|
block(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注意,使用这个方法需要将协程在合适的时候取消,否则会导致内存溢出
|
||||||
|
* @param action String
|
||||||
|
* @param block Function1<T, Unit>
|
||||||
|
*/
|
||||||
|
suspend fun <T : Any> subscribe(action: String, block: (T) -> Unit) {
|
||||||
|
with<T>(action).collect {
|
||||||
|
block(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:state_enabled="false" android:color="@color/line_gray" />
|
<item android:state_enabled="false" android:color="@color/line_gray" />
|
||||||
|
<item android:state_pressed="true" android:color="@color/line_gray" />
|
||||||
|
<item android:state_selected="true" android:color="@color/line_gray" />
|
||||||
|
<item android:state_checked="true" android:color="@color/line_gray" />
|
||||||
<item android:color="@color/white" />
|
<item android:color="@color/white" />
|
||||||
|
|
||||||
</selector>
|
</selector>
|
5
app/src/main/res/drawable/ic_baseline_check_24.xml
Normal file
5
app/src/main/res/drawable/ic_baseline_check_24.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#2C2C2C"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
|
||||||
|
</vector>
|
@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#2C2C2C"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6 1.41,-1.41z"/>
|
||||||
|
</vector>
|
@ -0,0 +1,5 @@
|
|||||||
|
<vector android:autoMirrored="true" android:height="24dp"
|
||||||
|
android:tint="#2C2C2C" android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M15.41,16.59L10.83,12l4.58,-4.59L14,6l-6,6 6,6 1.41,-1.41z"/>
|
||||||
|
</vector>
|
@ -0,0 +1,5 @@
|
|||||||
|
<vector android:autoMirrored="true" android:height="24dp"
|
||||||
|
android:tint="#2C2C2C" android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M8.59,16.59L13.17,12 8.59,7.41 10,6l6,6 -6,6 -1.41,-1.41z"/>
|
||||||
|
</vector>
|
8
app/src/main/res/drawable/selector_bg_round_button.xml
Normal file
8
app/src/main/res/drawable/selector_bg_round_button.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_enabled="false" android:drawable="@drawable/shape_round_btn_press"></item>
|
||||||
|
<item android:state_checked="true" android:drawable="@drawable/shape_round_btn_press"/>
|
||||||
|
<item android:state_pressed="true" android:drawable="@drawable/shape_round_btn_press"/>
|
||||||
|
<item android:state_selected="true" android:drawable="@drawable/shape_round_btn_press"></item>
|
||||||
|
<item android:drawable="@drawable/shape_round_btn_normal"/>
|
||||||
|
</selector>
|
6
app/src/main/res/drawable/selector_img_expand.xml
Normal file
6
app/src/main/res/drawable/selector_img_expand.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_expanded="true"
|
||||||
|
android:drawable="@drawable/ic_baseline_keyboard_arrow_down_24"/>
|
||||||
|
<item android:drawable="@drawable/ic_baseline_keyboard_arrow_right_24"/>
|
||||||
|
</selector>
|
11
app/src/main/res/drawable/shape_card_bg_default.xml
Normal file
11
app/src/main/res/drawable/shape_card_bg_default.xml
Normal 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">
|
||||||
|
<corners android:radius="@dimen/default_widget_padding"></corners>
|
||||||
|
<padding
|
||||||
|
android:bottom="@dimen/nimap_defalut_padding"
|
||||||
|
android:left="@dimen/nimap_defalut_padding"
|
||||||
|
android:right="@dimen/nimap_defalut_padding"
|
||||||
|
android:top="@dimen/nimap_defalut_padding"></padding>
|
||||||
|
<solid android:color="@color/colorSurface"></solid>
|
||||||
|
</shape>
|
5
app/src/main/res/drawable/shape_round_btn_normal.xml
Normal file
5
app/src/main/res/drawable/shape_round_btn_normal.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
<solid android:color="@color/colorSurface" />
|
||||||
|
</shape>
|
5
app/src/main/res/drawable/shape_round_btn_press.xml
Normal file
5
app/src/main/res/drawable/shape_round_btn_press.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
<solid android:color="@color/colorOnSurface" />
|
||||||
|
</shape>
|
@ -1,12 +1,64 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:background="@color/bg_left_pannel"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/title_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
style="@style/left_pannel_title_layout">
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/img_back"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
tools:context=".ui.fragment.empty.EmptyFragment">
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
android:background="@drawable/selector_bg_round_button"
|
||||||
|
android:foreground="@drawable/ripple_btn_press"
|
||||||
|
style="@style/btn_round"
|
||||||
|
android:src="@drawable/ic_baseline_keyboard_arrow_left_24"></androidx.appcompat.widget.AppCompatImageView>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/tv_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="@dimen/left_pannel_title_font"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"></androidx.appcompat.widget.AppCompatTextView>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/img_confirm"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
android:background="@drawable/selector_bg_round_button"
|
||||||
|
android:foreground="@drawable/ripple_btn_press"
|
||||||
|
style="@style/btn_round"
|
||||||
|
android:src="@drawable/ic_baseline_check_24"></androidx.appcompat.widget.AppCompatImageView>
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/title_layout"
|
||||||
|
style="@style/default_card_view">
|
||||||
<ExpandableListView
|
<ExpandableListView
|
||||||
android:id="@+id/elv_layer_manager"
|
android:id="@+id/elv_layer_manager"
|
||||||
|
android:divider="@android:drawable/divider_horizontal_dim_dark"
|
||||||
|
android:dividerHeight="0.1dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent"/>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.cardview.widget.CardView>
|
||||||
|
</LinearLayout>
|
@ -1,10 +1,21 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:paddingLeft="@dimen/default_widget_padding"
|
||||||
|
android:gravity="center_vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="wrap_content">
|
||||||
<androidx.appcompat.widget.AppCompatCheckBox
|
|
||||||
|
<CheckBox
|
||||||
android:id="@+id/chk_layermanager_child"
|
android:id="@+id/chk_layermanager_child"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:checked="true"></androidx.appcompat.widget.AppCompatCheckBox>
|
android:paddingVertical="0dp"
|
||||||
|
android:paddingHorizontal="@dimen/default_widget_padding"
|
||||||
|
android:checked="true"></CheckBox>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/tv_layermanager_child_name"
|
||||||
|
android:textSize="@dimen/default_font_size"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"></androidx.appcompat.widget.AppCompatTextView>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
@ -1,11 +1,32 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
<androidx.appcompat.widget.AppCompatCheckBox
|
|
||||||
android:id="@+id/chk_layermanager_parent"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textStyle="bold"
|
android:orientation="horizontal">
|
||||||
|
<androidx.appcompat.widget.AppCompatCheckBox
|
||||||
|
android:id="@+id/chk_layermanager_parent"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:focusable="false"
|
||||||
|
android:focusableInTouchMode="false"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
android:checked="true"></androidx.appcompat.widget.AppCompatCheckBox>
|
android:checked="true"></androidx.appcompat.widget.AppCompatCheckBox>
|
||||||
</LinearLayout>
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/img_group_indicator"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:src="@drawable/selector_img_expand"></androidx.appcompat.widget.AppCompatImageView>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/tv_layermanager_parent_name"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textSize="@dimen/default_font_size"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_toLeftOf="@id/img_group_indicator"
|
||||||
|
android:layout_toRightOf="@id/chk_layermanager_parent"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_height="wrap_content"></androidx.appcompat.widget.AppCompatTextView>
|
||||||
|
</RelativeLayout>
|
@ -2,11 +2,12 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<color name="transp">#00000000</color>
|
<color name="transp">#00000000</color>
|
||||||
<color name="line_gray" comment="轻度灰色,一般用于下划线,不可点击按钮的边框">#dadade</color>
|
<color name="line_gray" comment="轻度灰色,一般用于下划线,不可点击按钮的边框">#dadade</color>
|
||||||
|
<color name="bg_left_pannel" comment="左侧弹出框背景颜色">#f4f4fc</color>
|
||||||
<color name="colorPrimary">#6c14c4</color>
|
<color name="colorPrimary">#6c14c4</color>
|
||||||
<color name="colorSecondary">#4c54ec</color>
|
<color name="colorSecondary">#4c54ec</color>
|
||||||
<color name="colorAccent">#c42cd4</color>
|
<color name="colorAccent">#c42cd4</color>
|
||||||
<color name="colorSurface">#FFFFFF</color>
|
<color name="colorSurface">#FFFFFF</color>
|
||||||
<color name="colorOnSurface">#4263EB</color>
|
<color name="colorOnSurface">#3c3c44</color>
|
||||||
<color name="colorPrimarySurface">#aa342c4c</color>
|
<color name="colorPrimarySurface">#aa342c4c</color>
|
||||||
<color name="colorOnPrimarySurface">#FFFFFF</color>
|
<color name="colorOnPrimarySurface">#FFFFFF</color>
|
||||||
<color name="colorError">#e74c3c</color>
|
<color name="colorError">#e74c3c</color>
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
<dimen name="nav_header_vertical_spacing">8dp</dimen>
|
<dimen name="nav_header_vertical_spacing">8dp</dimen>
|
||||||
<dimen name="nav_header_height">176dp</dimen>
|
<dimen name="nav_header_height">176dp</dimen>
|
||||||
<dimen name="default_widget_padding">10dp</dimen>
|
<dimen name="default_widget_padding">10dp</dimen>
|
||||||
|
<dimen name="left_pannel_title_font" comment="左侧弹出框顶部标题字体大小">22sp</dimen>
|
||||||
<dimen name="default_font_size" comment="默认字体大小,style中父最顶层">15sp</dimen>
|
<dimen name="default_font_size" comment="默认字体大小,style中父最顶层">15sp</dimen>
|
||||||
<dimen name="card_title_font_size">24sp</dimen>
|
<dimen name="card_title_font_size">24sp</dimen>
|
||||||
<dimen name="card_title_font_2size">13sp</dimen>
|
<dimen name="card_title_font_2size">13sp</dimen>
|
||||||
|
@ -85,7 +85,7 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="btn_gradient_color" parent="TextAppearance.AppCompat.Button">
|
<style name="btn_gradient_color" parent="TextAppearance.AppCompat.Button">
|
||||||
<item name="android:textColor">@color/btn_select_color</item>
|
<item name="android:textColor">@color/selector_default_text_color_white_enable_gray</item>
|
||||||
<item name="android:background">@drawable/selector_bg_default_button</item>
|
<item name="android:background">@drawable/selector_bg_default_button</item>
|
||||||
<item name="android:clickable">true</item>
|
<item name="android:clickable">true</item>
|
||||||
<item name="android:focusable">true</item>
|
<item name="android:focusable">true</item>
|
||||||
@ -111,4 +111,23 @@
|
|||||||
<item name="android:windowBackground">@android:color/transparent</item>
|
<item name="android:windowBackground">@android:color/transparent</item>
|
||||||
<item name="android:windowNoTitle">true</item>
|
<item name="android:windowNoTitle">true</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<!-- 左侧弹出框顶部标题栏样式 -->
|
||||||
|
<style name="left_pannel_title_layout" parent="TextAppearance.AppCompat">
|
||||||
|
<item name="android:textSize">@dimen/left_pannel_title_font</item>
|
||||||
|
<item name="android:textColor">@color/black</item>
|
||||||
|
<item name="android:paddingHorizontal">@dimen/default_widget_padding</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--圆形按钮的样式-->
|
||||||
|
<style name="btn_round">
|
||||||
|
<item name="background">@drawable/selector_bg_round_button</item>
|
||||||
|
<item name="android:padding">@dimen/default_widget_padding</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="default_card_view" parent="@style/CardView">
|
||||||
|
<item name="background">@drawable/shape_card_bg_default</item>
|
||||||
|
<item name="android:layout_margin">@dimen/default_widget_padding</item>
|
||||||
|
<item name="cardCornerRadius">@dimen/default_widget_padding</item>
|
||||||
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -47,6 +47,8 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tracePa
|
|||||||
private lateinit var omdbVectorTileLayer: VectorTileLayer
|
private lateinit var omdbVectorTileLayer: VectorTileLayer
|
||||||
private lateinit var omdbLabelLayer: LabelLayer
|
private lateinit var omdbLabelLayer: LabelLayer
|
||||||
|
|
||||||
|
private val omdbTileSource by lazy { OMDBTileSource() }
|
||||||
|
|
||||||
init {
|
init {
|
||||||
initMap()
|
initMap()
|
||||||
}
|
}
|
||||||
@ -97,7 +99,6 @@ class LayerManagerHandler(context: AppCompatActivity, mapView: NIMapView,tracePa
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initOMDBVectorTileLayer() {
|
private fun initOMDBVectorTileLayer() {
|
||||||
val omdbTileSource: OMDBTileSource = OMDBTileSource()
|
|
||||||
omdbVectorTileLayer = VectorTileLayer(mMapView.vtmMap, omdbTileSource)
|
omdbVectorTileLayer = VectorTileLayer(mMapView.vtmMap, omdbTileSource)
|
||||||
omdbLabelLayer = LabelLayer(mMapView.vtmMap, omdbVectorTileLayer, LabelTileLoaderHook(), Constant.OMDB_MIN_ZOOM)
|
omdbLabelLayer = LabelLayer(mMapView.vtmMap, omdbVectorTileLayer, LabelTileLoaderHook(), Constant.OMDB_MIN_ZOOM)
|
||||||
if(omdbVectorTileLayer!=null){
|
if(omdbVectorTileLayer!=null){
|
||||||
|
@ -41,14 +41,14 @@ public class OMDBTileDataSource implements ITileDataSource {
|
|||||||
|
|
||||||
RealmQuery<RenderEntity> realmQuery = Realm.getDefaultInstance().where(RenderEntity.class)
|
RealmQuery<RenderEntity> realmQuery = Realm.getDefaultInstance().where(RenderEntity.class)
|
||||||
.rawPredicate("tileX>="+xStart+" and tileX<="+xEnd+" and tileY>="+yStart+" and tileY<="+yEnd);
|
.rawPredicate("tileX>="+xStart+" and tileX<="+xEnd+" and tileY>="+yStart+" and tileY<="+yEnd);
|
||||||
// // 筛选不显示的数据
|
// 筛选不显示的数据
|
||||||
// if (Constant.HAD_LAYER_INVISIABLE_ARRAY!=null&&Constant.HAD_LAYER_INVISIABLE_ARRAY.length>0) {
|
if (Constant.HAD_LAYER_INVISIABLE_ARRAY!=null&&Constant.HAD_LAYER_INVISIABLE_ARRAY.length>0) {
|
||||||
// realmQuery.beginGroup();
|
realmQuery.beginGroup();
|
||||||
// for (String type: Constant.HAD_LAYER_INVISIABLE_ARRAY) {
|
for (String type: Constant.HAD_LAYER_INVISIABLE_ARRAY) {
|
||||||
// realmQuery.notEqualTo("name", type);
|
realmQuery.notEqualTo("table", type);
|
||||||
// }
|
}
|
||||||
// realmQuery.endGroup();
|
realmQuery.endGroup();
|
||||||
// }
|
}
|
||||||
List<RenderEntity> listResult = realmQuery/*.distinct("id")*/.findAll();
|
List<RenderEntity> listResult = realmQuery/*.distinct("id")*/.findAll();
|
||||||
if (!listResult.isEmpty()) {
|
if (!listResult.isEmpty()) {
|
||||||
mThreadLocalDecoders.get().decode(tile, mapDataSink, listResult);
|
mThreadLocalDecoders.get().decode(tile, mapDataSink, listResult);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user