fix: 增加omdb图层管理
This commit is contained in:
@@ -2,6 +2,7 @@ package com.navinfo.omqs.ui.activity.login
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.activity.viewModels
|
||||
@@ -33,8 +34,35 @@ class LoginActivity : CheckPermissionsActivity() {
|
||||
binding.lifecycleOwner = this
|
||||
binding.activity = this
|
||||
initView()
|
||||
Log.e("jingo", getScreenParams())
|
||||
}
|
||||
|
||||
private fun getScreenParams(): String {
|
||||
val dm = DisplayMetrics();
|
||||
windowManager.defaultDisplay.getMetrics(dm);
|
||||
val heightPixels = dm.heightPixels;//高的像素
|
||||
val widthPixels = dm.widthPixels;//宽的像素
|
||||
val densityDpi = dm.densityDpi;//dpi
|
||||
val xdpi = dm.xdpi;//xdpi
|
||||
val ydpi = dm.ydpi;//ydpi
|
||||
val density = dm.density;//density=dpi/160,密度比
|
||||
val scaledDensity = dm.scaledDensity;//scaledDensity=dpi/160 字体缩放密度比
|
||||
val heightDP = heightPixels / density;//高度的dp
|
||||
val widthDP = widthPixels / density;//宽度的dp
|
||||
var str = "heightPixels: " + heightPixels + "px";
|
||||
str += "\nwidthPixels: " + widthPixels + "px";
|
||||
str += "\ndensityDpi: " + densityDpi + "dpi";
|
||||
str += "\nxdpi: " + xdpi + "dpi";
|
||||
str += "\nydpi: " + ydpi + "dpi";
|
||||
str += "\ndensity: " + density;
|
||||
str += "\nscaledDensity: " + scaledDensity;
|
||||
str += "\nheightDP: " + heightDP + "dp";
|
||||
str += "\nwidthDP: " + widthDP + "dp";
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 观察登录状态,把Observer提出来是为了防止每次数据变化都会有新的observer创建
|
||||
* 还有为了方便释放(需不需要手动释放?不清楚)不需要释放,当viewmodel观察到activity/fragment 的生命周期时会自动释放
|
||||
|
||||
@@ -10,17 +10,24 @@ import androidx.annotation.RequiresApi
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.findNavController
|
||||
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.omqs.Constant
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.bean.ImportConfig
|
||||
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.util.FlowEventBus
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration
|
||||
import org.videolan.vlc.Util
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
@@ -39,12 +46,31 @@ class MainActivity : BaseActivity() {
|
||||
@Inject
|
||||
lateinit var offlineMapDownloadManager: OfflineMapDownloadManager
|
||||
|
||||
private val signAdapter by lazy { SignAdapter() }
|
||||
private val rightController by lazy {
|
||||
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) {
|
||||
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)
|
||||
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
|
||||
|
||||
//初始化地图
|
||||
mapController.init(
|
||||
this,
|
||||
@@ -53,6 +79,8 @@ class MainActivity : BaseActivity() {
|
||||
Constant.MAP_PATH,
|
||||
Constant.USER_DATA_PATH + "/trace.sqlite"
|
||||
)
|
||||
// 在mapController初始化前获取当前OMDB图层显隐
|
||||
viewModel.refreshOMDBLayer(LayerConfigUtils.getLayerConfigList())
|
||||
//关联生命周期
|
||||
binding.lifecycleOwner = this
|
||||
//给xml转递对象
|
||||
@@ -63,19 +91,18 @@ class MainActivity : BaseActivity() {
|
||||
binding.mainActivityVoice.setOnTouchListener(object : View.OnTouchListener {
|
||||
@RequiresApi(Build.VERSION_CODES.Q)
|
||||
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
|
||||
Log.e("qj",event?.action.toString())
|
||||
Log.e("qj", event?.action.toString())
|
||||
when (event?.action) {
|
||||
MotionEvent.ACTION_DOWN ->{
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
voiceOnTouchStart()//Do Something
|
||||
Log.e("qj","voiceOnTouchStart")
|
||||
Log.e("qj", "voiceOnTouchStart")
|
||||
}
|
||||
MotionEvent.ACTION_UP ->{
|
||||
MotionEvent.ACTION_UP -> {
|
||||
voiceOnTouchStop()//Do Something
|
||||
Log.e("qj","voiceOnTouchStop")
|
||||
Log.e("qj", "voiceOnTouchStop")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return v?.onTouchEvent(event) ?: true
|
||||
}
|
||||
})
|
||||
@@ -86,6 +113,14 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
binding.mainActivitySignRecyclerview.layoutManager = LinearLayoutManager(this)
|
||||
binding.mainActivitySignRecyclerview.adapter = signAdapter
|
||||
//增加4dp的间隔
|
||||
binding.mainActivitySignRecyclerview.addItemDecoration(
|
||||
RecyclerViewSpacesItemDecoration(
|
||||
Util.convertDpToPx(
|
||||
this, 4
|
||||
)
|
||||
)
|
||||
)
|
||||
viewModel.liveDataSignList.observe(this) {
|
||||
signAdapter.refreshData(it)
|
||||
}
|
||||
@@ -93,17 +128,7 @@ class MainActivity : BaseActivity() {
|
||||
lifecycleScope.launch {
|
||||
// 初始化地图图层控制接收器
|
||||
FlowEventBus.subscribe<List<ImportConfig>>(lifecycle, Constant.EVENT_LAYER_MANAGER_CHANGE) {
|
||||
// 根据获取到的配置信息,筛选未勾选的图层名称
|
||||
val omdbVisibleList = it.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()
|
||||
viewModel.refreshOMDBLayer(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,14 +183,14 @@ class MainActivity : BaseActivity() {
|
||||
naviController.navigate(R.id.EvaluationResultFragment)*/
|
||||
}
|
||||
|
||||
fun voiceOnTouchStart(){
|
||||
viewModel!!.startSoundMetter(this,binding.mainActivityVoice)
|
||||
fun voiceOnTouchStart() {
|
||||
viewModel.startSoundMetter(this, binding.mainActivityVoice)
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.Q)
|
||||
fun voiceOnTouchStop(){
|
||||
if(Constant.IS_VIDEO_SPEED){
|
||||
viewModel!!.stopSoundMeter()
|
||||
fun voiceOnTouchStop() {
|
||||
if (Constant.IS_VIDEO_SPEED) {
|
||||
viewModel.stopSoundMeter()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ import androidx.lifecycle.viewModelScope
|
||||
import androidx.navigation.findNavController
|
||||
import com.blankj.utilcode.util.ToastUtils
|
||||
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
|
||||
import com.navinfo.collect.library.data.entity.NiLocation
|
||||
import com.navinfo.collect.library.data.entity.RenderEntity
|
||||
import com.navinfo.collect.library.map.NIMapController
|
||||
import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener
|
||||
@@ -30,9 +29,11 @@ import com.navinfo.collect.library.utils.GeometryToolsKt
|
||||
import com.navinfo.omqs.Constant
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.bean.ImportConfig
|
||||
import com.navinfo.omqs.bean.SignBean
|
||||
import com.navinfo.omqs.db.RealmOperateHelper
|
||||
import com.navinfo.omqs.ui.dialog.CommonDialog
|
||||
import com.navinfo.omqs.ui.manager.TakePhotoManager
|
||||
import com.navinfo.omqs.ui.widget.SignUtil
|
||||
import com.navinfo.omqs.util.DateTimeUtil
|
||||
import com.navinfo.omqs.util.FlowEventBus
|
||||
import com.navinfo.omqs.util.SoundMeter
|
||||
@@ -69,6 +70,7 @@ class MainViewModel @Inject constructor(
|
||||
val liveDataSignList = MutableLiveData<List<SignBean>>()
|
||||
|
||||
var testPoint = GeoPoint(0, 0)
|
||||
|
||||
//语音窗体
|
||||
private var pop: PopupWindow? = null
|
||||
|
||||
@@ -87,7 +89,7 @@ class MainViewModel @Inject constructor(
|
||||
})
|
||||
initLocation()
|
||||
viewModelScope.launch {
|
||||
mapController.onMapClickFlow.collect {
|
||||
mapController.onMapClickFlow.collectLatest {
|
||||
testPoint = it
|
||||
}
|
||||
}
|
||||
@@ -156,9 +158,12 @@ class MainViewModel @Inject constructor(
|
||||
)
|
||||
signList.add(
|
||||
SignBean(
|
||||
iconId = R.drawable.icon_speed_limit,
|
||||
iconText = element.name,
|
||||
iconId = SignUtil.getSignIcon(element),
|
||||
iconText = SignUtil.getSignText(element),
|
||||
distance = distance.toInt(),
|
||||
elementId = element.id,
|
||||
linkId = linkId,
|
||||
geometry = element.geometry
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -184,6 +189,9 @@ class MainViewModel @Inject constructor(
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
mapController.lineHandler.removeLine()
|
||||
}
|
||||
}
|
||||
|
||||
//点击相机按钮
|
||||
@@ -226,7 +234,7 @@ class MainViewModel @Inject constructor(
|
||||
|
||||
fun startSoundMetter(context: Context, v: View) {
|
||||
|
||||
if(mSpeakMode==null){
|
||||
if (mSpeakMode == null) {
|
||||
mSpeakMode = SpeakMode(context as Activity?)
|
||||
}
|
||||
|
||||
@@ -270,7 +278,8 @@ class MainViewModel @Inject constructor(
|
||||
}
|
||||
mSpeakMode!!.speakText("结束录音")
|
||||
//获取右侧fragment容器
|
||||
val naviController = (context as Activity).findNavController(R.id.main_activity_right_fragment)
|
||||
val naviController =
|
||||
(context as Activity).findNavController(R.id.main_activity_right_fragment)
|
||||
val bundle = Bundle()
|
||||
bundle.putString("filePath", filePath)
|
||||
naviController.navigate(R.id.EvaluationResultFragment, bundle)
|
||||
@@ -300,6 +309,24 @@ class MainViewModel @Inject constructor(
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理页面调转
|
||||
|
||||
@@ -3,11 +3,13 @@ package com.navinfo.omqs.ui.activity.map
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.bean.SignBean
|
||||
import com.navinfo.omqs.databinding.AdapterSignBinding
|
||||
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
|
||||
import com.navinfo.omqs.ui.other.BaseViewHolder
|
||||
|
||||
class SignAdapter : BaseRecyclerViewAdapter<SignBean>() {
|
||||
class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null) :
|
||||
BaseRecyclerViewAdapter<SignBean>() {
|
||||
override fun getItemViewRes(position: Int): Int {
|
||||
return R.layout.adapter_sign
|
||||
}
|
||||
@@ -23,5 +25,8 @@ class SignAdapter : BaseRecyclerViewAdapter<SignBean>() {
|
||||
val item = data[position]
|
||||
bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId)
|
||||
bd.signMainIcon.text = item.iconText
|
||||
bd.root.setOnClickListener {
|
||||
itemListener?.invoke(position, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.navinfo.omqs.ui.activity.map
|
||||
|
||||
data class SignBean(
|
||||
//图标ID
|
||||
val iconId: Int,
|
||||
val distance: Int = 0,
|
||||
val iconText: String = ""
|
||||
)
|
||||
Reference in New Issue
Block a user