增加车信提前看板显示

调整条件限速,常规限速提前看板,详细看板
调整道路名详细信息
This commit is contained in:
squallzhjch 2023-06-27 16:11:11 +08:00
parent fd2c5d0358
commit 6921e4c0b0
67 changed files with 1364 additions and 300 deletions

View File

@ -1,6 +1,7 @@
package com.navinfo.omqs.bean
import android.os.Parcelable
import com.navinfo.collect.library.data.entity.RenderEntity
import kotlinx.parcelize.Parcelize
@Parcelize
@ -11,20 +12,14 @@ data class SignBean(
val distance: Int = 0,
//左上图标中的文字
val iconText: String = "",
//绑定的要素id
val elementId: String = "",
//绑定的linkid
val linkId: String,
//坐标
val geometry: String,
//名称
val name: String,
//是否要展示详细信息
val isMoreInfo: Boolean = false,
//底部右侧文字
val bottomRightText: String = "",
//要素code类型
val elementCode: Int,
//需要展示更多的内容
val moreText: String = "",
//左上角信息
val topRightText: String = ""
//捕捉数据
val renderEntity: RenderEntity
) : Parcelable

View File

@ -31,7 +31,7 @@ import com.navinfo.omqs.ui.activity.BaseActivity
import com.navinfo.omqs.ui.fragment.console.ConsoleFragment
import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapFragment
import com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListFragment
import com.navinfo.omqs.ui.fragment.sign.RoadNameInfoFragment
import com.navinfo.omqs.ui.fragment.signMoreInfo.SignMoreInfoFragment
import com.navinfo.omqs.ui.fragment.tasklist.TaskManagerFragment
import com.navinfo.omqs.ui.widget.RecyclerViewSpacesItemDecoration
import com.navinfo.omqs.util.FlowEventBus
@ -61,7 +61,7 @@ class MainActivity : BaseActivity() {
/**
* 是否开启右侧面板
*/
var switchFragment = false
private var switchFragment = false
/**
* 检测是否含有tts插件
@ -90,6 +90,7 @@ class MainActivity : BaseActivity() {
*/
private val signAdapter by lazy {
SignAdapter(object : OnSignAdapterClickListener {
//点击看板进去问题反馈面板
override fun onItemClick(signBean: SignBean) {
rightController.currentDestination?.let {
if (it.id == R.id.RightEmptyFragment) {
@ -101,14 +102,15 @@ class MainActivity : BaseActivity() {
}
}
//点击详细信息
override fun onMoreInfoClick(selectTag: String, tag: String, signBean: SignBean) {
if (binding.mainActivitySignMoreInfoGroup.visibility != View.VISIBLE || selectTag != tag) {
binding.mainActivitySignMoreInfoGroup.visibility = View.VISIBLE
binding.mainActivitySignMoreInfoTitle.text = signBean.name
binding.mainActivitySignMoreInfoText1.text = signBean.bottomRightText
binding.mainActivitySignMoreInfoText2.text = signBean.moreText
} else {
binding.mainActivitySignMoreInfoGroup.visibility = View.GONE
viewModel.showSignMoreInfo(signBean.renderEntity)
val fragment =
supportFragmentManager.findFragmentById(R.id.main_activity_sign_more_info_fragment)
if (fragment == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.main_activity_sign_more_info_fragment, SignMoreInfoFragment())
.commit()
}
}
@ -122,10 +124,6 @@ class MainActivity : BaseActivity() {
}
}
}
override fun onHideMoreInfoView() {
binding.mainActivitySignMoreInfoGroup.visibility = View.GONE
}
})
}
@ -200,13 +198,13 @@ class MainActivity : BaseActivity() {
}
//道路绑定,名称变化
viewModel.liveDataRoadName.observe(this) {
if (it != null && it.isNotEmpty()) {
binding.mainActivityRoadName.text = it[0].name
if (binding.mainActivityRoadName.visibility != View.VISIBLE)
binding.mainActivityRoadName.visibility = View.VISIBLE
if (it != null) {
binding.mainActivityRoadName.text = it.properties["name"]
if (binding.mainActivityRoadName.visibility != View.VISIBLE) binding.mainActivityRoadName.visibility =
View.VISIBLE
} else {
if (binding.mainActivityRoadName.visibility != View.GONE)
binding.mainActivityRoadName.visibility = View.GONE
if (binding.mainActivityRoadName.visibility != View.GONE) binding.mainActivityRoadName.visibility =
View.GONE
}
}
@ -242,13 +240,11 @@ class MainActivity : BaseActivity() {
//监听地图中点变化
viewModel.liveDataCenterPoint.observe(this) {
Log.e("qj", "${it.longitude}")
try {
if (it != null && it.longitude != null && it.latitude != null) {
binding.mainActivityGeometry.text = "经纬度:${
BigDecimal(it.longitude).setScale(
7,
RoundingMode.HALF_UP
7, RoundingMode.HALF_UP
)
},${BigDecimal(it.latitude).setScale(7, RoundingMode.HALF_UP)}"
}
@ -257,6 +253,16 @@ class MainActivity : BaseActivity() {
}
}
viewModel.liveDataSignMoreInfo.observe(this){
val fragment =
supportFragmentManager.findFragmentById(R.id.main_activity_sign_more_info_fragment)
if (fragment == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.main_activity_sign_more_info_fragment, SignMoreInfoFragment())
.commit()
}
}
lifecycleScope.launch {
// 初始化地图图层控制接收器
FlowEventBus.subscribe<List<ImportConfig>>(
@ -487,8 +493,7 @@ class MainActivity : BaseActivity() {
}
leftFragment = TaskManagerFragment {
binding.mainActivityLeftFragment.visibility = View.GONE
supportFragmentManager.beginTransaction()
.remove(leftFragment!!).commit()
supportFragmentManager.beginTransaction().remove(leftFragment!!).commit()
leftFragment = null
null
}
@ -508,8 +513,7 @@ class MainActivity : BaseActivity() {
}
leftFragment = QsRecordListFragment {
binding.mainActivityLeftFragment.visibility = View.GONE
supportFragmentManager.beginTransaction()
.remove(leftFragment!!).commit()
supportFragmentManager.beginTransaction().remove(leftFragment!!).commit()
leftFragment = null
null
}
@ -536,8 +540,7 @@ class MainActivity : BaseActivity() {
}
leftFragment = OfflineMapFragment {
binding.mainActivityLeftFragment.visibility = View.GONE
supportFragmentManager.beginTransaction()
.remove(leftFragment!!).commit()
supportFragmentManager.beginTransaction().remove(leftFragment!!).commit()
leftFragment = null
null
}
@ -547,15 +550,11 @@ class MainActivity : BaseActivity() {
}
/**
* 打开道路名称属性看板
* 打开道路名称属性看板选择的道路在viewmodel里记录不用
*/
fun openRoadNameFragment() {
val fragment =
supportFragmentManager.findFragmentById(R.id.main_activity_sign_more_info_fragment)
if (fragment !is RoadNameInfoFragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.main_activity_sign_more_info_fragment, RoadNameInfoFragment())
.commit()
if (viewModel.liveDataRoadName.value != null) {
viewModel.showSignMoreInfo(viewModel.liveDataRoadName.value!!)
}
}
}

View File

@ -78,7 +78,13 @@ class MainViewModel @Inject constructor(
val liveDataTopSignList = MutableLiveData<List<SignBean>>()
//道路名
val liveDataRoadName = MutableLiveData<List<RoadNameBean>?>()
val liveDataRoadName = MutableLiveData<RenderEntity?>()
/**
* 当前选中的要展示的详细信息的要素
*/
val liveDataSignMoreInfo = MutableLiveData<RenderEntity>()
// var testPoint = GeoPoint(0, 0)
//uuid标识用于记录轨迹组
@ -96,6 +102,7 @@ class MainViewModel @Inject constructor(
var menuState: Boolean = false
val liveDataMenuState = MutableLiveData<Boolean>()
val liveDataCenterPoint = MutableLiveData<MapPosition>()
@ -236,7 +243,7 @@ class MainViewModel @Inject constructor(
if (element.code == 2011) {
hisRoadName = true
liveDataRoadName.postValue(SignUtil.getRoadNameList(element))
liveDataRoadName.postValue(element)
continue
}
@ -248,20 +255,18 @@ class MainViewModel @Inject constructor(
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,
moreText = SignUtil.getMoreInfoText(element)
renderEntity = element,
isMoreInfo = SignUtil.isMoreInfo(element)
)
Log.e("jingo", "捕捉到的数据code ${element.code}")
when (element.code) {
2002, 2008, 2010, 2041 -> topSignList.add(
signBean
)
4002, 4003, 4004, 4022 -> signList.add(
4002, 4003, 4004, 4010, 4022, 4601 -> signList.add(
signBean
)
}
@ -288,8 +293,8 @@ class MainViewModel @Inject constructor(
}
}
liveDataTopSignList.postValue(topSignList.distinctBy { it.elementCode })
liveDataSignList.postValue(signList.distinctBy { it.elementCode })
liveDataTopSignList.postValue(topSignList.distinctBy { it.distance })
liveDataSignList.postValue(signList.sortedBy { it.distance })
val speechText = SignUtil.getRoadSpeechText(topSignList)
withContext(Dispatchers.Main) {
speakMode?.speakText(speechText)
@ -495,8 +500,19 @@ class MainViewModel @Inject constructor(
}
}
/**
* 是否开启了线选择
*/
fun isSelectRoad(): Boolean {
return bSelectRoad
}
/**
* 要展示的要素详细信息
*/
fun showSignMoreInfo(data: RenderEntity) {
liveDataSignMoreInfo.value = data
}
}

View File

@ -1,63 +1,133 @@
package com.navinfo.omqs.ui.activity.map
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.databinding.AdapterSignBinding
import com.navinfo.omqs.databinding.AdapterSignLaneinfoBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
import com.navinfo.omqs.ui.widget.SignUtil
interface OnSignAdapterClickListener {
fun onItemClick(signBean: SignBean)
fun onMoreInfoClick(selectTag: String, tag: String, signBean: SignBean)
fun onErrorClick(signBean: SignBean)
fun onHideMoreInfoView()
}
data class LaneInfoItem(val id: Int, val type: Int)
class SignAdapter(private var listener: OnSignAdapterClickListener?) :
BaseRecyclerViewAdapter<SignBean>() {
/**
* 选中的详细信息按钮的tag标签
*/
private var selectMoreInfoTag: String = ""
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_sign
override fun getItemViewType(position: Int): Int {
if (data.isNotEmpty() && data[position].renderEntity.code == 4601) {
return 4601
}
return 0
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =
AdapterSignBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return BaseViewHolder(viewBinding)
return if (viewType == 4601) {
val viewBinding =
AdapterSignLaneinfoBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
BaseViewHolder(viewBinding)
} else {
val viewBinding =
AdapterSignBinding.inflate(LayoutInflater.from(parent.context), parent, false)
BaseViewHolder(viewBinding)
}
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val bd = holder.viewBinding as AdapterSignBinding
val context = holder.viewBinding.root.context
val item = data[position]
if (item.iconId != 0) bd.signMainIconBg.setImageResource(item.iconId)
bd.signMainIcon.text = item.iconText
bd.signBottomText.text = item.name
holder.tag = item.name + position
//点击错误按钮
bd.signMainFastError.setOnClickListener {
listener?.onErrorClick(item)
}
bd.signBottomRightText.text = item.bottomRightText
if (holder.viewBinding is AdapterSignBinding) {
val bd = holder.viewBinding
bd.root.setOnClickListener {
if (item.iconId != 0) bd.signMainIconBg.setImageResource(item.iconId)
bd.signMainIcon.text = item.iconText
bd.signBottomText.text = item.name
//点击错误按钮
bd.signMainFastError.setOnClickListener {
listener?.onErrorClick(item)
}
bd.signBottomRightText.text = item.bottomRightText
if (item.isMoreInfo) {
bd.signMainInfo.visibility = View.VISIBLE
bd.signMainInfo.setOnClickListener {
listener?.onMoreInfoClick(selectMoreInfoTag, holder.tag, item)
selectMoreInfoTag = holder.tag
}
} else {
bd.signMainInfo.visibility = View.GONE
}
bd.signSecondIcon.text = ""
if (item.renderEntity.code == 4002) {
val minSpeed = SignUtil.getSpeedLimitMinText(item.renderEntity)
if (minSpeed != "0") {
bd.signSecondIcon.text = minSpeed
}
}
} else if (holder.viewBinding is AdapterSignLaneinfoBinding) {
val bd = holder.viewBinding
bd.signMoreIconsLayout.removeAllViews()
bd.signBottomText.text = item.name
bd.signBottomRightText.text = item.distance.toString()
val list = SignUtil.getLineInfoIcons(item.renderEntity)
val lineViewS = View(context)
lineViewS.layoutParams = ViewGroup.LayoutParams(24, 80)
lineViewS.background = context.getDrawable(R.drawable.shape_vertical_dashed_line)
bd.signMoreIconsLayout.addView(lineViewS, lineViewS.layoutParams)
for (i in list.indices) {
val laneInfo = list[i]
val imageView = ImageView(context)
val drawable = context.getDrawable(laneInfo.id)
var color = when (laneInfo.type) {
1 -> bd.root.resources.getColor(R.color.lane_info_1)
2 -> bd.root.resources.getColor(R.color.lane_info_2)
else -> bd.root.resources.getColor(R.color.white)
}
// 创建 PorterDuffColorFilter 对象
val colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)
// 将 PorterDuffColorFilter 设置给 Drawable
drawable!!.colorFilter = colorFilter
// 将 Drawable 设置给 ImageView
imageView.background = drawable
// 将 ImageView 的颜色设置为红色
imageView.setColorFilter(color, PorterDuff.Mode.SRC_IN)
imageView.layoutParams = ViewGroup.LayoutParams(35, 100)
bd.signMoreIconsLayout.addView(imageView, imageView.layoutParams)
if (i < list.size - 1) {
val lineView = View(context)
lineView.layoutParams = ViewGroup.LayoutParams(24, 80)
lineView.background = context.getDrawable(R.drawable.shape_vertical_dashed_line)
bd.signMoreIconsLayout.addView(lineView, lineView.layoutParams)
}
}
val lineViewE = View(context)
lineViewE.layoutParams = ViewGroup.LayoutParams(24, 80)
lineViewE.background = context.getDrawable(R.drawable.shape_vertical_dashed_line)
bd.signMoreIconsLayout.addView(lineViewE, lineViewE.layoutParams)
}
holder.viewBinding.root.setOnClickListener {
listener?.onItemClick(item)
}
if (item.moreText.isNotEmpty()) {
bd.signMainInfo.visibility = View.VISIBLE
//点击更多信息按钮
bd.signMainInfo.setOnClickListener {
listener?.onMoreInfoClick(selectMoreInfoTag, holder.tag, item)
selectMoreInfoTag = holder.tag
}
} else bd.signMainInfo.visibility = View.GONE
holder.tag = item.name + position
}
override fun refreshData(newData: List<SignBean>) {
@ -67,7 +137,6 @@ class SignAdapter(private var listener: OnSignAdapterClickListener?) :
return
}
}
listener?.onHideMoreInfoView()
}
}

View File

@ -11,9 +11,6 @@ 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 =

View File

@ -1,13 +1,8 @@
package com.navinfo.omqs.ui.fragment
import android.os.Bundle
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
abstract class BaseFragment : Fragment() {
// override fun onCreateView(
@ -49,7 +44,7 @@ abstract class BaseFragment : Fragment() {
// savedInstanceState: Bundle?
// ): View
fun onBackPressed(): Boolean{
open fun onBackPressed(): Boolean{
// findNavController().navigateUp()
return true
}

View File

@ -20,6 +20,7 @@ import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.other.shareViewModels
import dagger.hilt.android.AndroidEntryPoint
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import com.navinfo.omqs.ui.dialog.FirstDialog
@AndroidEntryPoint
@ -70,12 +71,12 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
val mDialog = FirstDialog(context)
mDialog.setTitle("提示?")
mDialog.setMessage("是否退出,请确认!")
mDialog.setPositiveButton("确定", object : FirstDialog.OnClickListener {
override fun onClick(dialog: Dialog?, which: Int) {
mDialog.dismiss()
onBackPressed()
}
})
mDialog.setPositiveButton(
"确定"
) { _, _ ->
mDialog.dismiss()
onBackPressed()
}
mDialog.setNegativeButton("取消", null)
mDialog.show()
}
@ -315,4 +316,9 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
}
}
override fun onBackPressed(): Boolean {
findNavController().navigateUp()
return true
}
}

View File

@ -137,7 +137,7 @@ class EvaluationResultViewModel @Inject constructor(
}
} else {
liveDataQsRecordBean.value?.run {
elementId = bean.elementId
elementId = bean.renderEntity.code.toString()
linkId = bean.linkId
if (linkId.isNotEmpty()) {
viewModelScope.launch {
@ -149,7 +149,7 @@ class EvaluationResultViewModel @Inject constructor(
}
}
}
val point = GeometryTools.createGeoPoint(bean.geometry)
val point = GeometryTools.createGeoPoint(bean.renderEntity.geometry)
this.geometry = GeometryTools.createGeometry(point).toText()
mapController.animationHandler.animationByLatLon(point.latitude, point.longitude)
mapController.markerHandle.addMarker(point, markerTitle)
@ -198,7 +198,7 @@ class EvaluationResultViewModel @Inject constructor(
liveDataLeftTypeList.postValue(it)
if (bean != null) {
val classType2 = roomAppDatabase.getScProblemTypeDao()
.findClassTypeByCode(bean.elementCode)
.findClassTypeByCode(bean.renderEntity.code)
if (classType2 != null) {
classType = classType2
}

View File

@ -13,9 +13,6 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
BaseRecyclerViewAdapter<String>() {
private var selectTitle = ""
override fun getItemViewRes(position: Int): Int {
return R.layout.text_item_select
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =

View File

@ -13,9 +13,6 @@ class MiddleAdapter(private var itemListener: ((Int, String) -> Unit?)? = null)
BaseRecyclerViewAdapter<String>() {
private var selectTitle = ""
override fun getItemViewRes(position: Int): Int {
return R.layout.text_item_select
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =

View File

@ -11,9 +11,6 @@ class RightGroupHeaderAdapter(private var itemListener: ((Int, RightBean) -> Uni
BaseRecyclerViewAdapter<RightBean>() {
private var selectTitle = ""
private var groupTitleList = mutableListOf<String>()
override fun getItemViewRes(position: Int): Int {
return R.layout.text_item_select2
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =

View File

@ -224,10 +224,6 @@ class SoundtListAdapter(
}
}
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_sound_list
}
}

View File

@ -131,10 +131,6 @@ class OfflineMapCityListAdapter(
}
}
}
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_offline_map_city
}
}

View File

@ -58,9 +58,6 @@ class QsRecordListAdapter(
binding.qsRecordTime.text = qsRecordBean.checkTime
}
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_qs_record_list
}
// 提供set方法
fun setOnKotlinItemClickListener(itemClickListener: IKotlinItemClickListener) {

View File

@ -1,57 +0,0 @@
package com.navinfo.omqs.ui.fragment.sign
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.navinfo.omqs.databinding.FragmentSignRoadnameBinding
import com.navinfo.omqs.ui.activity.map.MainViewModel
import com.navinfo.omqs.ui.fragment.BaseFragment
class RoadNameInfoFragment : BaseFragment() {
private var _binding: FragmentSignRoadnameBinding? = null
private val binding get() = _binding!!
private val viewModel by activityViewModels<MainViewModel>()
private val adapter by lazy { RoadNameInfoAdapter() }
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
_binding = FragmentSignRoadnameBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val layoutManager = LinearLayoutManager(context)
//// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能
binding.roadnameRecyclerview.setHasFixedSize(true)
binding.roadnameRecyclerview.layoutManager = layoutManager
binding.roadnameRecyclerview.adapter = adapter
viewModel.liveDataRoadName.observe(viewLifecycleOwner) {
if (it != null && it.isNotEmpty()) {
adapter.refreshData(it)
} else {
activity?.run {
supportFragmentManager.beginTransaction().remove(this@RoadNameInfoFragment)
.commit()
}
}
}
binding.roadnameCancel.setOnClickListener {
activity?.run {
supportFragmentManager.beginTransaction().remove(this@RoadNameInfoFragment)
.commit()
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -0,0 +1,30 @@
package com.navinfo.omqs.ui.fragment.signMoreInfo
import android.view.LayoutInflater
import android.view.ViewGroup
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.AdapterElectronicEyeBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
data class ElectronicEyeMoreInfoAdapterItem(
val title: String,
val text: String
)
class ElectronicEyeInfoAdapter : BaseRecyclerViewAdapter<ElectronicEyeMoreInfoAdapterItem>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =
AdapterElectronicEyeBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return BaseViewHolder(viewBinding)
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val binding: AdapterElectronicEyeBinding =
holder.viewBinding as AdapterElectronicEyeBinding
val item = data[position]
binding.title.text = item.title
binding.text.text = item.text
}
}

View File

@ -1,4 +1,4 @@
package com.navinfo.omqs.ui.fragment.sign
package com.navinfo.omqs.ui.fragment.signMoreInfo
import android.view.LayoutInflater
import android.view.ViewGroup
@ -9,9 +9,6 @@ import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
class RoadNameInfoAdapter : BaseRecyclerViewAdapter<RoadNameBean>() {
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_road_name
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val viewBinding =

View File

@ -0,0 +1,100 @@
package com.navinfo.omqs.ui.fragment.signMoreInfo
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentSignInfoBinding
import com.navinfo.omqs.ui.activity.map.MainViewModel
import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.widget.SignUtil
class SignMoreInfoFragment : BaseFragment() {
private var _binding: FragmentSignInfoBinding? = null
private val binding get() = _binding!!
private val viewModel by activityViewModels<MainViewModel>()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
_binding = FragmentSignInfoBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val layoutManager = LinearLayoutManager(context)
//// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能
binding.signInfoRecyclerview.setHasFixedSize(true)
binding.signInfoRecyclerview.layoutManager = layoutManager
viewModel.liveDataSignMoreInfo.observe(viewLifecycleOwner) {
binding.signInfoTitle.text = it.name
val drawable = resources.getDrawable(R.drawable.icon_main_moreinfo_text_left, null);
drawable.setBounds(
0,
0,
drawable.minimumWidth,
drawable.minimumHeight
);//必须设置图片大小,否则不显示
binding.signInfoTitle.setCompoundDrawables(
drawable, null, null, null
)
when (it.code) {
//道路名
2011 -> {
val adapter = RoadNameInfoAdapter()
binding.signInfoRecyclerview.adapter = adapter
adapter.refreshData(SignUtil.getRoadNameList(it))
}
//常规点限速
4002->{
val adapter = ElectronicEyeInfoAdapter()
binding.signInfoRecyclerview.adapter = adapter
adapter.refreshData(SignUtil.getSpeedLimitMoreInfoText(it))
}
//条件点限速
4003 -> {
val adapter = ElectronicEyeInfoAdapter()
binding.signInfoRecyclerview.adapter = adapter
adapter.refreshData(SignUtil.getConditionLimitMoreInfoText(it))
}
//电子眼
4010
-> {
val drawable = resources.getDrawable(R.drawable.icon_electronic_eye_left, null);
drawable.setBounds(
0,
0,
drawable.minimumWidth,
drawable.minimumHeight
);//必须设置图片大小,否则不显示
binding.signInfoTitle.setCompoundDrawables(
drawable, null, null, null
)
val adapter = ElectronicEyeInfoAdapter()
binding.signInfoRecyclerview.adapter = adapter
adapter.refreshData(SignUtil.getElectronicEyeMoreInfo(it))
}
}
}
binding.signInfoCancel.setOnClickListener {
activity?.run {
supportFragmentManager.beginTransaction().remove(this@SignMoreInfoFragment)
.commit()
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -58,9 +58,6 @@ class TaskAdapter(
}
}
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_task
}
fun resetSelect() {
selectPosition = -1

View File

@ -282,10 +282,6 @@ class TaskListAdapter(
}
}
}
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_task_list
}
}

View File

@ -1,11 +1,6 @@
package com.navinfo.omqs.ui.other
import android.view.LayoutInflater
import android.view.View.OnClickListener
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import com.navinfo.omqs.R
/**
* RecyclerView 适配器基础类
@ -27,10 +22,10 @@ abstract class BaseRecyclerViewAdapter<T>(var data: List<T> = listOf()) :
// )
// }
abstract fun getItemViewRes(position: Int): Int
override fun getItemViewType(position: Int): Int {
return getItemViewRes(position)
// abstract fun getItemViewRes(position: Int): Int
//
open override fun getItemViewType(position: Int): Int {
return 0
}
override fun getItemCount(): Int {

View File

@ -1,12 +1,14 @@
package com.navinfo.omqs.ui.widget
import android.util.Log
import com.google.gson.Gson
import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.RoadNameBean
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.ui.activity.map.LaneInfoItem
import com.navinfo.omqs.ui.fragment.signMoreInfo.ElectronicEyeMoreInfoAdapterItem
import org.json.JSONArray
import java.lang.reflect.Field
class SignUtil {
companion object {
@ -25,7 +27,7 @@ class SignUtil {
//车道数
2041 -> getLaneNumText(data)
//常规点限速,条件点限速
4002, 4003 -> getSpeedLimitText(data)
4002, 4003 -> getSpeedLimitMaxText(data)
else -> ""
}
}
@ -79,8 +81,12 @@ class SignUtil {
4004 -> "可变点限速"
//普通交限
4006 -> "普通交限"
//电子眼
4010 -> "电子眼"
//交通灯
4022 -> "交通灯"
//交限
4601 -> "车信"
else -> ""
}
}
@ -96,24 +102,45 @@ class SignUtil {
}
}
/**
* 更多信息展示文字
*/
fun getMoreInfoText(data: RenderEntity): String {
return when (data.code) {
//条件点限速
4003 -> getConditionLimitMoreInfoText(data)
else -> ""
}
}
/**
* 条件点限速更多信息
*/
private fun getConditionLimitMoreInfoText(data: RenderEntity): String {
return data.properties["validPeriod"].toString()
fun getConditionLimitMoreInfoText(renderEntity: RenderEntity): List<ElectronicEyeMoreInfoAdapterItem> {
val list = mutableListOf<ElectronicEyeMoreInfoAdapterItem>()
val maxSpeed = renderEntity.properties["maxSpeed"]
if (maxSpeed != null) {
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "最高限速值(km/h)", text = maxSpeed
)
)
}
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "限速条件", text = getConditionLimitText(renderEntity)
)
)
val carType = renderEntity.properties["vehicleType"]
if (carType != "0") {
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "车辆类型", text = getElectronicEyeVehicleType(carType!!.toInt())
)
)
}
val time = renderEntity.properties["validPeriod"]
if (time?.isNotEmpty() == true) {
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "时间段", text = time
)
)
}
return list
}
/**
* 条件点限速文字
*/
@ -163,21 +190,31 @@ class SignUtil {
/**
* 获取限速值文字
*/
private fun getSpeedLimitText(data: RenderEntity): String {
private fun getSpeedLimitMaxText(data: RenderEntity): String {
try {
//限速标志 0 限速开始 1 限速解除
val maxSpeed = data.properties["maxSpeed"]
val minSpeed = data.properties["minSpeed"]
return if (maxSpeed != "0")
maxSpeed.toString()
else
minSpeed.toString()
return maxSpeed.toString()
} catch (e: Exception) {
Log.e("jingo", "获取限速面板ICON出错1 $e")
}
return ""
}
/**
* 获取限速值文字
*/
fun getSpeedLimitMinText(data: RenderEntity): String {
try {
//限速标志 0 限速开始 1 限速解除
val minSpeed = data.properties["minSpeed"]
return minSpeed.toString()
} catch (e: Exception) {
Log.e("jingo", "获取限速面板ICON出错1 $e")
}
return "0"
}
/**
* 获取种别名称
*/
@ -185,6 +222,25 @@ class SignUtil {
return data.properties["kind"].toString()
}
/**
* 常规点限速更多信息
*/
fun getSpeedLimitMoreInfoText(renderEntity: RenderEntity): List<ElectronicEyeMoreInfoAdapterItem> {
val list = mutableListOf<ElectronicEyeMoreInfoAdapterItem>()
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "最高限速值(km/h)", text = getSpeedLimitMaxText(renderEntity)
)
)
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "最低限速值(km/h)", text = getSpeedLimitMinText(renderEntity)
)
)
return list
}
/**
* 限速图标
*/
@ -235,6 +291,8 @@ class SignUtil {
4003 -> getConditionalSpeedLimitIcon(data)
//可变点限速
4004 -> R.drawable.icon_change_limit
//电子眼
4010 -> R.drawable.icon_electronic_eye
//交通灯
4022 -> R.drawable.icon_traffic_light
else -> 0
@ -318,12 +376,11 @@ class SignUtil {
* 获取道路播报语音文字
*/
fun getRoadSpeechText(topSignList: MutableList<SignBean>): String {
if (topSignList.size == 0)
return ""
if (topSignList.size == 0) return ""
val stringBuffer = StringBuffer()
stringBuffer.append("当前道路")
for (item in topSignList) {
when (item.elementCode) {
when (item.renderEntity.code) {
2002 -> stringBuffer.append("功能等级${item.iconText.substring(2)}级,")
2008 -> stringBuffer.append("种别${item.iconText},")
2010 -> stringBuffer.append("${item.iconText},")
@ -347,10 +404,7 @@ class SignUtil {
val seqNum = jsonObject.optInt("seqNum", 1)
val nameClass = jsonObject.optInt("nameClass", 1)
val bean = RoadNameBean(
name = name,
type = type,
seqNum = seqNum,
nameClass = nameClass
name = name, type = type, seqNum = seqNum, nameClass = nameClass
)
list.add(bean)
}
@ -370,5 +424,195 @@ class SignUtil {
}
return list
}
/**
* 是否要有详细信息需要展示
*/
fun isMoreInfo(element: RenderEntity): Boolean {
val isMore = when (element.code) {
//常规点限速
4002 -> getSpeedLimitMinText(element) != "0"
//条件点限速
4003 -> true
//电子眼
4010 -> true
else -> false
}
Log.e("jingo", "更多信息:${element.code} $isMore")
return isMore
}
/**
* 获取电子眼详细信息
*/
fun getElectronicEyeMoreInfo(renderEntity: RenderEntity): List<ElectronicEyeMoreInfoAdapterItem> {
val list = mutableListOf<ElectronicEyeMoreInfoAdapterItem>()
val kindCode = renderEntity.properties["kind"]!!.toInt()
val kind = ElectronicEyeMoreInfoAdapterItem(
title = "电子眼类型", text = getElectronicEyeKindType(kindCode)
)
list.add(kind)
when (kindCode) {
1, 2, 3, 4, 5, 6, 20, 21 -> {
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "限速值(km/h)",
text = renderEntity.properties["speedLimit"].toString()
)
)
}
}
val carType = renderEntity.properties["vehicleType"]
if (carType != null && carType != "0") {
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "车辆类型",
text = getElectronicEyeVehicleType(carType.toInt())
)
)
}
val time = renderEntity.properties["validPeriod"]
if (time?.isNotEmpty() == true) {
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "时间段", text = time
)
)
}
if (kindCode == 20 || kindCode == 21) {
list.add(
ElectronicEyeMoreInfoAdapterItem(
title = "区间测试配对", text = renderEntity.properties["pairEleceyeId"].toString()
)
)
}
return list
}
/**
* 获取电子眼车辆类型
*/
private fun getElectronicEyeVehicleType(type: Int): String {
var stringBuffer = StringBuffer()
for (i in 31 downTo 0) {
val bit = (type shr i) and 1
if (bit == 1) {
when (i) {
0 -> stringBuffer.append("其他 ")
1 -> stringBuffer.append("小汽车 ")
2 -> stringBuffer.append("公交车 ")
3 -> stringBuffer.append("多人乘坐车辆 ")
4 -> stringBuffer.append("配送车 ")
5 -> stringBuffer.append("摩托车 ")
6 -> stringBuffer.append("行人 ")
7 -> stringBuffer.append("自行车 ")
8 -> stringBuffer.append("出租车 ")
10 -> stringBuffer.append("紧急车辆 ")
11 -> stringBuffer.append("运输卡车 ")
}
}
}
return stringBuffer.toString()
}
/**
* 获取电子眼类型
*/
private fun getElectronicEyeKindType(kind: Int): String {
return when (kind) {
0 -> "未调查"
1 -> "超高速"
2 -> "超低速"
3 -> "移动式测速"
4 -> "可变限速"
5 -> "分车道限速"
6 -> "分车种限速"
7 -> "违规用灯"
8 -> "违规占车道"
9 -> "违规过路口"
10 -> "机动车闯红灯"
11 -> "路况监控"
12 -> "单行线"
13 -> "占用非机动车道"
14 -> "出入口"
15 -> "占用公交车专用道"
16 -> "禁止左右转"
17 -> "禁止掉头"
18 -> "占用应急车道"
19 -> "违反禁止标线"
20 -> "区间测速开始"
21 -> "区间测速结束"
22 -> "违章停车"
23 -> "尾号限行"
24 -> "环保限行"
25 -> "不系安全带"
26 -> "开车打手机"
27 -> "礼让行人"
28 -> "违反禁令标志"
29 -> "禁止鸣笛"
30 -> "车辆未按规定年检"
31 -> "车辆尾气超标"
32 -> "ETC拍照计费电子眼"
33 -> "专用车道电子眼预留"
34 -> "交通标线电子眼预留"
35 -> "违章电子眼预留"
36 -> "卡车超限电子眼"
37 -> "限时长停车电子眼"
else -> "无效类型"
}
}
/**
* 获取车信图标
*/
fun getLineInfoIcons(renderEntity: RenderEntity): List<LaneInfoItem> {
val list = mutableListOf<LaneInfoItem>()
try {
var laneinfoGroup = renderEntity.properties["laneinfoGroup"]
if (laneinfoGroup != null) {
laneinfoGroup = laneinfoGroup.substring(1, laneinfoGroup.length - 1)
laneinfoGroup = "[$laneinfoGroup]"
}
val jsonArray = JSONArray(laneinfoGroup)
if (jsonArray.length() == 2) {
val itemArray = jsonArray[0]
val typeArray = jsonArray[1]
if ((itemArray is JSONArray) && (typeArray is JSONArray) && itemArray.length() == typeArray.length()) {
for (i in 0 until itemArray.length()) {
val itemObject = itemArray[i]
val type = typeArray[i]
var laneInfo = "laneinfo_${itemObject.toString().replace(",", "_")}"
Log.e("jingo", "车信图标 $laneInfo")
list.add(
LaneInfoItem(
id = getResId(
laneInfo, R.drawable::class.java
), type = type!!.toString().toInt()
)
)
}
}
}
} catch (e: Exception) {
Log.e("jingo", "json 解析失败")
}
return list
}
/**
* 通过字符串名称获取资源id
*/
private fun getResId(variableName: String, c: Class<*>): Int {
return try {
val idField: Field = c.getDeclaredField(variableName)
idField.getInt(idField)
} catch (e: java.lang.Exception) {
e.printStackTrace()
R.drawable.laneinfo_0
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="10dp"
android:height="30dp"
android:viewportWidth="10"
android:viewportHeight="30">
<path
android:pathData="M0.604,0.667h8.792v28.667h-8.792z"
android:strokeWidth="1"
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M2.604,2.833h4.899v24.395h-4.899z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="10dp"
android:height="28dp"
android:viewportWidth="12"
android:viewportHeight="30">
<path
android:pathData="M7.341,29.432l-0.03,-24.586l4.399,3.566l0.079,-3.273l-5.723,-4.571l-5.856,4.564l0.088,3.485l4.672,-3.972l0.015,24.785z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M13.399,29.168l0.015,-25.164l3.677,3.127l0.069,-2.744l-4.61,-3.594l-4.504,3.599l0.063,2.577l3.463,-2.855l-0.012,25.094z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M11.776,17.839C11.797,17.422 11.543,15.976 10.416,15.185C9.29,14.393 7.37,14.529 7.37,14.529L4.05,14.544L7.178,18.221L4.437,18.291L0.84,13.68L4.441,9.176L7.019,9.238L4.164,12.701L7.17,12.689C7.17,12.689 9.013,12.637 10.061,13.123C11.106,13.608 12.461,14.723 12.606,15.132C12.885,15.948 11.751,18.237 11.776,17.839Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="30dp"
android:viewportWidth="26"
android:viewportHeight="30">
<path
android:pathData="M12.653,16.041C12.51,15.631 11.395,14.759 10.348,14.273C9.302,13.787 7.094,13.84 7.094,13.84L4.084,13.852L6.942,10.387L4.362,10.325L0.761,14.831L4.357,19.444L7.103,19.375L3.974,15.696L7.294,15.68C7.294,15.68 9.158,15.43 10.285,16.222C11.412,17.014 12.669,18.363 12.676,18.749C12.689,19.521 12.94,16.859 12.653,16.041Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M14.058,29.084l-0.026,-24.425l3.847,3.12l0.069,-2.864l-5.002,-3.999l-5.122,3.994l0.078,3.049l4.084,-3.475l0.014,24.6z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.348,16.041C13.492,15.631 14.606,14.759 15.653,14.273C16.699,13.787 18.906,13.84 18.906,13.84L21.915,13.852L19.058,10.387L21.637,10.325L25.239,14.831L21.643,19.444L18.897,19.375L22.026,15.696L18.705,15.68C18.705,15.68 16.843,15.43 15.714,16.222C14.587,17.014 13.33,18.363 13.324,18.749C13.312,19.521 13.061,16.859 13.348,16.041Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M12.059,12.145C11.915,11.735 10.799,10.862 9.752,10.375C8.705,9.889 6.495,9.942 6.495,9.942L3.484,9.953L6.343,6.485L3.762,6.422L0.158,10.932L3.758,15.55L6.506,15.48L3.374,11.797L6.698,11.782C6.698,11.782 8.563,11.532 9.691,12.324C10.819,13.117 12.077,14.467 12.083,14.854C12.095,15.629 12.346,12.965 12.059,12.145Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.74,20.555C13.472,15.211 3.833,15.203 3.932,20.672L3.958,26.174L0.455,23.086L0.389,25.144L5.016,29.037L9.436,25.17L9.442,22.912L5.951,26.08L5.968,21.073C6.051,17.487 11.694,17.618 11.879,20.979L13.74,20.555Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.95,29.096l-0.026,-24.447l3.851,3.124l0.068,-2.867l-5.007,-4.002l-5.126,3.998l0.078,3.051l4.088,-3.478l0.014,24.621z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M14.042,29.168l0.015,-25.164l3.678,3.127l0.068,-2.744l-4.609,-3.594l-4.504,3.598l0.063,2.577l3.463,-2.855l-0.012,25.094z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.42,22.839C12.442,22.422 12.187,20.976 11.06,20.185C9.934,19.393 8.014,19.529 8.014,19.529L4.695,19.544L7.823,23.221L5.081,23.291L1.485,18.68L5.085,14.176L7.663,14.238L4.808,17.701L7.815,17.689C7.815,17.689 9.657,17.637 10.705,18.123C11.75,18.608 13.105,19.723 13.25,20.132C13.529,20.947 12.396,23.236 12.42,22.839Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.922,14.333l-10.542,-6.516l4.596,-1.476l-2.296,-1.506l-5.483,2.023l0.684,5.724l2.222,1.305l-0.6,-4.448l10.823,6.681z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="30dp"
android:viewportWidth="26"
android:viewportHeight="30">
<path
android:pathData="M13.37,29.208l-0.012,-25.095l3.463,2.855l0.063,-2.577l-4.504,-3.599l-4.609,3.595l0.068,2.744l3.678,-3.127l0.015,25.164z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.249,16.121l10.823,-6.681l-0.6,4.448l2.222,-1.305l0.684,-5.724l-5.483,-2.023l-2.296,1.506l4.596,1.476l-10.542,6.516z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M11.558,16.964C11.579,16.547 11.325,15.101 10.198,14.31C9.072,13.518 7.152,13.654 7.152,13.654L3.832,13.669L6.96,17.346L4.218,17.416L0.622,12.805L4.223,8.301L6.8,8.363L3.946,11.826L6.952,11.814C6.952,11.814 8.794,11.762 9.842,12.248C10.887,12.733 12.243,13.848 12.387,14.257C12.668,15.071 11.533,17.361 11.558,16.964Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M6.439,29.208l-0.014,-25.095l3.465,2.855l0.063,-2.577l-4.504,-3.599l-4.61,3.594l0.069,2.744l3.677,-3.127l0.017,25.164z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M5.398,15.129C5.541,14.72 6.898,13.605 7.943,13.12C8.99,12.634 10.832,12.686 10.832,12.686L13.838,12.698L10.984,9.235L13.562,9.173L17.161,13.677L13.566,18.288L10.823,18.218L13.951,14.541L10.63,14.525C10.63,14.525 8.71,14.389 7.584,15.181C6.457,15.972 6.2,17.418 6.226,17.835C6.245,18.236 5.111,15.946 5.398,15.129Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="30dp"
android:viewportWidth="24"
android:viewportHeight="30">
<path
android:pathData="M12.909,29.208l-0.014,-25.095l3.465,2.855l0.062,-2.577l-4.504,-3.599l-4.61,3.594l0.069,2.744l3.677,-3.127l0.017,25.164z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M11.867,15.131C12.011,14.722 13.367,13.607 14.413,13.122C15.459,12.636 17.301,12.688 17.301,12.688L20.307,12.7L17.453,9.237L20.031,9.175L23.63,13.679L20.036,18.29L17.292,18.22L20.419,14.543L17.1,14.528C17.1,14.528 15.18,14.392 14.054,15.184C12.927,15.975 12.67,17.421 12.696,17.838C12.716,18.237 11.581,15.948 11.867,15.131Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.728,16.487C12.462,11.151 3.809,11.142 3.909,16.603L3.934,24.524L0.437,21.441L0.37,23.496L4.991,27.383L9.404,23.523L9.409,21.268L5.924,24.432L5.943,17.005C6.026,13.423 10.929,13.555 11.117,16.911L12.728,16.487Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="30dp"
android:viewportWidth="26"
android:viewportHeight="30">
<path
android:pathData="M14.467,29.168l0.016,-25.164l3.677,3.127l0.069,-2.744l-4.61,-3.594l-4.504,3.599l0.063,2.577l3.463,-2.855l-0.013,25.094z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M14.347,14.333l-10.542,-6.516l4.596,-1.476l-2.296,-1.506l-5.484,2.023l0.685,5.724l2.222,1.305l-0.601,-4.448l10.823,6.681z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.615,14.256C13.759,13.847 15.115,12.732 16.16,12.247C17.208,11.761 19.05,11.813 19.05,11.813L22.057,11.825L19.202,8.362L21.779,8.3L25.379,12.804L21.782,17.416L19.04,17.346L22.168,13.669L18.849,13.654C18.849,13.654 16.929,13.518 15.802,14.31C14.675,15.101 14.419,16.547 14.443,16.964C14.465,17.361 13.331,15.072 13.615,14.256Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M5.796,29.208l-0.012,-25.095l3.463,2.855l0.063,-2.577l-4.504,-3.599l-4.609,3.595l0.068,2.744l3.678,-3.127l0.015,25.164z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M4.754,20.131C4.899,19.722 6.254,18.607 7.299,18.122C8.347,17.636 10.19,17.688 10.19,17.688L13.196,17.7L10.341,14.237L12.919,14.175L16.519,18.679L12.923,23.29L10.181,23.22L13.309,19.543L9.99,19.528C9.99,19.528 8.07,19.392 6.944,20.184C5.817,20.975 5.56,22.421 5.584,22.838C5.604,23.236 4.469,20.946 4.754,20.131Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M4.674,16.121l10.823,-6.681l-0.6,4.448l2.222,-1.305l0.684,-5.724l-5.483,-2.024l-2.296,1.506l4.596,1.476l-10.542,6.516z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M13.663,17.172C13.392,11.782 3.671,11.773 3.772,17.289L3.796,22.839L0.263,19.724L0.198,21.8L4.865,25.726L9.322,21.826L9.328,19.548L5.807,22.744L5.826,17.693C5.909,14.076 11.597,14.209 11.788,17.598L13.663,17.172Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.875,29.218l-0.026,-24.657l3.885,3.15l0.067,-2.892l-5.05,-4.037l-5.17,4.031l0.078,3.078l4.124,-3.508l0.014,24.833z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M14.042,29.168l0.015,-25.164l3.678,3.127l0.068,-2.744l-4.609,-3.594l-4.504,3.599l0.063,2.577l3.463,-2.855l-0.012,25.094z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.921,14.333l-10.542,-6.516l4.596,-1.476l-2.295,-1.506l-5.484,2.023l0.684,5.724l2.222,1.305l-0.6,-4.448l10.823,6.681z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="30dp"
android:viewportWidth="18"
android:viewportHeight="30">
<path
android:pathData="M5.796,29.208l-0.012,-25.095l3.463,2.855l0.063,-2.577l-4.504,-3.599l-4.609,3.595l0.068,2.744l3.678,-3.127l0.015,25.164z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M4.674,16.119l10.823,-6.681l-0.6,4.448l2.222,-1.305l0.684,-5.724l-5.483,-2.024l-2.296,1.506l4.596,1.476l-10.542,6.516z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="17dp"
android:height="30dp"
android:viewportWidth="17"
android:viewportHeight="30">
<path
android:pathData="M5.909,29.208l-0.014,-25.095l3.465,2.855l0.062,-2.577l-4.504,-3.599l-4.61,3.594l0.069,2.744l3.677,-3.127l0.017,25.164z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M5.81,17.908C5.85,16.247 7.134,15.699 8.5,15.699C9.075,15.699 9.806,15.785 10.261,16C10.753,16.232 10.89,16.497 10.934,16.756C11.006,17.178 11.006,19.768 10.934,24.524L7.437,21.441L7.37,23.496L11.991,27.383L16.404,23.523L16.409,21.268L12.924,24.432L12.943,17.005C11.991,12.082 3.929,13.555 4.117,16.911L5.81,17.908Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M11.215,29.041l-0.015,-20.829l2.037,0.136l0.029,20.687z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.148,8.08C13.525,8.766 11.227,10.283 11.222,9.895C11.214,9.508 11.171,7.913 10.04,7.118C8.909,6.323 7.285,6.33 7.285,6.33L3.955,6.346L7.094,10.036L4.34,10.105L0.734,5.479L4.346,0.959L6.933,1.021L4.067,4.496L7.085,4.484C7.085,4.484 8.883,4.561 9.982,4.919C11.559,5.428 12.494,6.524 13.148,8.08Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="30dp"
android:viewportWidth="26"
android:viewportHeight="30">
<path
android:pathData="M11.82,29.099l0.027,-21.84l2.354,-0.14l-0.018,21.987z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.017,7.058C12.87,6.634 11.462,5.48 10.38,4.978C9.298,4.476 7.391,4.53 7.391,4.53L4.282,4.542L7.237,0.958L4.569,0.894L0.842,5.556L4.563,10.329L7.405,10.257L4.169,6.451L7.605,6.434C7.605,6.434 9.283,6.428 10.449,7.247C11.615,8.067 11.91,9.713 11.917,10.112C11.923,10.91 13.312,7.904 13.017,7.058Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.985,7.058C13.131,6.634 14.538,5.48 15.62,4.978C16.702,4.476 18.609,4.53 18.609,4.53L21.719,4.542L18.763,0.958L21.431,0.894L25.159,5.556L21.439,10.329L18.596,10.257L21.833,6.451L18.397,6.434C18.397,6.434 16.719,6.428 15.552,7.247C14.386,8.067 14.091,9.713 14.085,10.112C14.077,10.91 12.685,7.904 12.985,7.058Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="30dp"
android:viewportWidth="26"
android:viewportHeight="30">
<path
android:pathData="M11.82,29.099l0.028,-21.84l2.354,-0.14l-0.018,21.987z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.017,7.058C12.87,6.634 11.463,5.48 10.381,4.978C9.299,4.476 7.392,4.53 7.392,4.53L4.283,4.542L7.238,0.958L4.57,0.894L0.842,5.556L4.563,10.329L7.405,10.257L4.168,6.451L7.604,6.434C7.604,6.434 9.282,6.428 10.448,7.247C11.614,8.067 11.908,9.713 11.915,10.112C11.923,10.91 13.313,7.904 13.017,7.058Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.984,7.058C13.13,6.634 14.537,5.48 15.619,4.978C16.701,4.476 18.608,4.53 18.608,4.53L21.718,4.542L18.762,0.958L21.43,0.894L25.158,5.556L21.436,10.329L18.595,10.258L21.832,6.452L18.395,6.434C18.395,6.434 16.719,6.428 15.553,7.247C14.387,8.067 14.092,9.713 14.086,10.112C14.076,10.91 12.686,7.904 12.984,7.058Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.875,17.759C13.6,12.236 4.64,12.227 4.744,17.879L4.768,26.079L1.151,22.887L1.082,25.014L5.864,29.037L10.429,25.041L10.435,22.707L6.83,25.982L6.848,18.294C6.933,14.587 11.759,14.724 11.952,18.197L13.875,17.759Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M11.217,29.181l0.029,-20.904l2.058,-0.137l-0.015,21.047z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M10.055,4.814C8.943,4.452 7.126,4.376 7.126,4.376L4.078,4.387L6.974,0.876L4.361,0.813L0.713,5.38L4.357,10.055L7.14,9.985L3.97,6.256L7.334,6.24C7.334,6.24 8.978,6.234 10.119,7.036C11.262,7.839 11.305,9.452 11.308,9.843C11.314,10.234 13.636,8.7 13.255,8.008C12.593,6.434 11.645,5.329 10.055,4.814Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.229,18.072C12.96,12.661 4.183,12.653 4.286,18.19L4.31,26.223L0.765,23.096L0.696,25.18L5.384,29.121L9.858,25.206L9.864,22.918L6.332,26.127L6.349,18.595C6.433,14.963 11.162,15.096 11.349,18.5L13.229,18.072Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M11.429,29.262l0.032,-18.901l2.048,-0.838l-0.034,19.755z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.51,9.521l-9.535,-5.817l4.597,-1.476l-2.297,-1.506l-5.483,2.023l0.684,5.724l2.223,1.305l-0.601,-4.448l10.101,6.226z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M11.425,19.516C11.447,19.099 11.192,17.653 10.065,16.862C8.939,16.07 7.019,16.206 7.019,16.206L3.7,16.221L6.828,19.898L4.086,19.968L0.49,15.357L4.09,10.853L6.668,10.915L3.813,14.378L6.82,14.366C6.82,14.366 8.662,14.314 9.71,14.8C10.755,15.285 12.111,16.4 12.255,16.809C12.536,17.626 11.401,19.915 11.425,19.516Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="30dp"
android:viewportWidth="24"
android:viewportHeight="30">
<path
android:pathData="M11.116,29.278l-0.033,-19.755l2.048,0.838l0.032,18.901z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M11.393,11.553l10.101,-6.226l-0.601,4.448l2.223,-1.305l0.684,-5.724l-5.483,-2.023l-2.297,1.505l4.597,1.476l-9.535,5.817z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M11.135,19.578C11.158,19.161 10.903,17.715 9.776,16.924C8.649,16.132 6.729,16.268 6.729,16.268L3.41,16.283L6.538,19.96L3.796,20.03L0.2,15.419L3.8,10.915L6.378,10.977L3.523,14.44L6.53,14.428C6.53,14.428 8.372,14.376 9.42,14.862C10.465,15.347 11.821,16.462 11.965,16.871C12.248,17.688 11.112,19.976 11.135,19.578Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M0.734,29.033l0.028,-20.686l2.036,-0.136l-0.016,20.829z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M4.019,4.92C5.119,4.562 6.915,4.485 6.915,4.485L9.935,4.497L7.069,1.022L9.656,0.96L13.267,5.48L9.661,10.106L6.907,10.037L10.046,6.347L6.716,6.331C6.716,6.331 5.091,6.324 3.96,7.119C2.829,7.914 2.786,9.509 2.78,9.896C2.775,10.284 0.475,8.767 0.853,8.081C1.505,6.524 2.443,5.428 4.019,4.92Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="30dp"
android:viewportWidth="24"
android:viewportHeight="30">
<path
android:pathData="M10.947,29.277l-0.034,-19.755l2.048,0.838l0.032,18.901z"
android:fillColor="#00C800"/>
<path
android:pathData="M11.226,11.553l10.101,-6.226l-0.601,4.448l2.223,-1.305l0.684,-5.724l-5.484,-2.023l-2.296,1.506l4.597,1.476l-9.535,5.817z"
android:fillColor="#00C800"/>
<path
android:pathData="M12.769,18.262C12.502,12.908 3.819,12.899 3.917,18.379L3.943,26.328L0.432,23.234L0.367,25.297L5.004,29.196L9.432,25.322L9.439,23.058L5.942,26.233L5.96,18.779C6.043,15.185 10.721,15.318 10.908,18.685L12.769,18.262Z"
android:fillColor="#00C800"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="30dp"
android:viewportWidth="24"
android:viewportHeight="30">
<path
android:pathData="M10.836,29.262l0.032,-18.901l2.048,-0.838l-0.034,19.755z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.917,9.521l-9.535,-5.817l4.597,-1.476l-2.297,-1.506l-5.483,2.023l0.684,5.724l2.223,1.305l-0.601,-4.448l10.101,6.226z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.036,16.871C12.18,16.462 13.536,15.347 14.581,14.862C15.629,14.376 17.471,14.428 17.471,14.428L20.478,14.44L17.623,10.977L20.201,10.915L23.801,15.419L20.205,20.03L17.463,19.96L20.591,16.283L17.272,16.268C17.272,16.268 15.352,16.132 14.225,16.924C13.098,17.715 12.842,19.161 12.866,19.578C12.886,19.977 11.751,17.688 12.036,16.871Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M0.523,29.278l-0.033,-19.755l2.048,0.838l0.032,18.901z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M0.801,11.553l10.1,-6.227l-0.601,4.448l2.223,-1.305l0.684,-5.724l-5.483,-2.023l-2.297,1.506l4.597,1.476l-9.534,5.817z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M1.745,16.809C1.889,16.4 3.245,15.285 4.29,14.8C5.338,14.314 7.18,14.366 7.18,14.366L10.187,14.378L7.332,10.915L9.91,10.853L13.51,15.357L9.914,19.968L7.172,19.898L10.3,16.221L6.981,16.206C6.981,16.206 5.061,16.07 3.935,16.862C2.808,17.653 2.552,19.099 2.575,19.516C2.597,19.915 1.463,17.626 1.745,16.809Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="28dp"
android:viewportWidth="20"
android:viewportHeight="28">
<path
android:pathData="M19.104,5.358C19.1,-1.893 5.711,-1.692 5.629,5.504L5.661,23.316L0.979,19.457L0.896,22.94L6.984,27.804L13.218,22.947L13.122,19.239L8.151,23.199L8.172,6.006C8.315,0.933 16.333,1.474 16.473,5.889L16.428,27.974L19.083,27.987L19.104,5.358Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M11.278,29.261l0.032,-18.901l2.048,-0.838l-0.034,19.755z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.359,9.52l-9.535,-5.817l4.597,-1.476l-2.297,-1.506l-5.483,2.023l0.684,5.724l2.223,1.305l-0.601,-4.448l10.101,6.226z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.163,18.345C12.896,12.991 4.213,12.982 4.311,18.462L4.337,26.411L0.826,23.317L0.761,25.38L5.398,29.279L9.826,25.405L9.832,23.141L6.336,26.316L6.354,18.862C6.437,15.268 11.115,15.401 11.302,18.768L13.163,18.345Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="30dp"
android:viewportWidth="24"
android:viewportHeight="30">
<path
android:pathData="M10.947,29.277l-0.034,-19.755l2.048,0.838l0.032,18.901z"
android:fillColor="#00C800"/>
<path
android:pathData="M11.226,11.553l10.101,-6.226l-0.601,4.448l2.223,-1.305l0.684,-5.724l-5.484,-2.023l-2.296,1.506l4.597,1.476l-9.535,5.817z"
android:fillColor="#00C800"/>
<path
android:pathData="M12.769,18.262C12.502,12.908 3.819,12.899 3.917,18.379L3.943,26.328L0.432,23.234L0.367,25.297L5.004,29.196L9.432,25.322L9.439,23.058L5.942,26.233L5.96,18.779C6.043,15.185 10.721,15.318 10.908,18.685L12.769,18.262Z"
android:fillColor="#00C800"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M11.278,29.262l0.032,-18.901l2.048,-0.838l-0.034,19.755z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M13.359,9.521l-9.535,-5.817l4.597,-1.476l-2.297,-1.506l-5.483,2.023l0.684,5.724l2.223,1.305l-0.601,-4.448l10.101,6.226z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="30dp"
android:viewportWidth="26"
android:viewportHeight="30">
<path
android:pathData="M13.608,9.595l-9.534,-5.817l4.597,-1.476l-2.297,-1.506l-5.483,2.023l0.684,5.724l2.223,1.305l-0.601,-4.448l10.101,6.226z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M11.777,29.413l-0.034,-19.755l2.049,0.838l0.031,18.901z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M12.702,11.417l10.101,-6.226l-0.601,4.448l2.223,-1.305l0.684,-5.724l-5.483,-2.023l-2.297,1.506l4.597,1.476l-9.535,5.817z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="30dp"
android:viewportWidth="14"
android:viewportHeight="30">
<path
android:pathData="M0.674,29.277l-0.034,-19.755l2.048,0.838l0.032,18.901z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M0.953,11.553l10.101,-6.226l-0.601,4.448l2.223,-1.305l0.684,-5.724l-5.483,-2.023l-2.297,1.506l4.597,1.476l-9.535,5.817z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="28dp"
android:viewportWidth="18"
android:viewportHeight="28">
<path
android:pathData="M2.676,10.345C2.671,8.227 2.441,6.999 2.676,5.876C3.359,2.607 5.252,2.578 6.627,2.547C7.633,2.524 9.049,2.69 9.706,3.801C10.314,4.828 10.201,6.729 10.201,8.491L10.233,12.303L5.551,8.444L5.468,11.927L11.556,16.791L17.79,11.934L17.694,8.226L12.723,12.186L12.744,5.993C12.723,0.845 9.405,-0.087 6.151,0C2.986,0.085 0,1.805 0.045,5.876L0,27.961L2.655,27.974L2.676,10.345Z"
android:strokeWidth="1"
android:fillColor="#00C800"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
</vector>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:width="1dp"
android:color="@color/white"
android:dashWidth="6dp"
android:dashGap="6dp" />
<size android:width="1dp" />
</shape>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-300dp"
android:right="-300dp">
<rotate
android:drawable="@drawable/shape_dashed_line"
android:fromDegrees="90" />
</item>
</layer-list>

View File

@ -74,61 +74,6 @@
app:layout_constraintLeft_toLeftOf="@id/main_activity_top_sign_recyclerview"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/main_activity_sign_more_info_bg"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_marginLeft="260dp"
android:layout_marginTop="40dp"
android:background="@drawable/main_sign_moreinfo_bg"
android:minHeight="140dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/main_activity_top_sign_recyclerview" />
<TextView
android:id="@+id/main_activity_sign_more_info_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:drawableLeft="@drawable/icon_main_moreinfo_text_left"
android:drawablePadding="4dp"
android:text="条件点限速"
android:textColor="@color/orange"
app:layout_constraintLeft_toLeftOf="@id/main_activity_sign_more_info_bg"
app:layout_constraintTop_toTopOf="@id/main_activity_sign_more_info_bg" />
<TextView
android:id="@+id/main_activity_sign_more_info_text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:text="条件点限速"
android:textColor="@color/white"
app:layout_constraintRight_toRightOf="@id/main_activity_sign_more_info_bg"
app:layout_constraintTop_toBottomOf="@id/main_activity_sign_more_info_title" />
<TextView
android:id="@+id/main_activity_sign_more_info_text2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:singleLine="false"
android:text="条件点限速"
android:textColor="@color/white"
app:layout_constraintLeft_toLeftOf="@id/main_activity_sign_more_info_bg"
app:layout_constraintRight_toRightOf="@id/main_activity_sign_more_info_bg"
app:layout_constraintTop_toBottomOf="@id/main_activity_sign_more_info_text1" />
<androidx.constraintlayout.widget.Group
android:id="@+id/main_activity_sign_more_info_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="main_activity_sign_more_info_bg,main_activity_sign_more_info_text2,main_activity_sign_more_info_text1,main_activity_sign_more_info_title" />
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/main_activity_flow"
android:layout_width="0dp"

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
tools:context="com.navinfo.omqs.ui.fragment.signMoreInfo.ElectronicEyeInfoAdapter">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:textColor="@color/white" />
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/title"
android:layout_weight="2"
android:textColor="@color/white" />
</LinearLayout>

View File

@ -29,6 +29,16 @@
android:textColor="#2F2F2F"
android:textSize="16sp" />
<TextView
android:id="@+id/sign_second_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:gravity="center"
android:layout_marginTop="10dp"
android:layout_toRightOf="@id/sign_main_icon"
android:text=""
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/sign_bottom_text"
android:layout_width="wrap_content"
@ -46,10 +56,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/sign_bottom_text"
android:layout_alignRight="@id/sign_main_bg"
android:layout_marginRight="15dp"
android:gravity="center"
android:text="其他信息"
android:layout_alignRight="@id/sign_main_bg"
android:textColor="@color/white"
android:textSize="14sp" />
@ -65,11 +75,12 @@
<ImageView
android:id="@+id/sign_main_fast_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="172dp"
android:layout_marginTop="4dp"
android:layout_alignParentTop="true"
android:background="@drawable/icon_evaluation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:visibility="gone"
android:background="@drawable/icon_evaluation" />
</RelativeLayout>

View File

@ -0,0 +1,41 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="193dp"
android:layout_height="78dp"
android:background="@drawable/bg_sign_laneinfo"
android:orientation="vertical"
tools:context="com.navinfo.omqs.ui.activity.map.SignAdapter">
<LinearLayout
android:id="@+id/sign_more_icons_layout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="15dp"
android:paddingRight="15dp" />
<TextView
android:id="@+id/sign_bottom_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="15dp"
android:layout_marginBottom="5dp"
android:gravity="center"
android:text="道路名"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/sign_bottom_right_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/sign_bottom_text"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:gravity="center"
android:text="其他信息"
android:textColor="@color/white"
android:textSize="14sp" />
</RelativeLayout>

View File

@ -1,36 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<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:clickable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/main_sign_moreinfo_bg"
android:padding="8dp"
tools:context=".ui.fragment.sign.RoadNameInfoFragment">
tools:context=".ui.fragment.signMoreInfo.SignMoreInfoFragment">
<TextView
android:id="@+id/roadname_title"
android:id="@+id/sign_info_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/icon_main_moreinfo_text_left"
android:drawablePadding="4dp"
android:text="条件点限速"
android:text="电子眼"
android:textColor="@color/orange" />
<ImageView
android:id="@+id/roadname_cancel"
android:id="@+id/sign_info_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/roadname_title"
android:layout_alignBottom="@id/roadname_title"
android:layout_alignTop="@id/sign_info_title"
android:layout_alignBottom="@id/sign_info_title"
android:layout_alignParentRight="true"
android:src="@drawable/baseline_cancel_24" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/roadname_recyclerview"
android:id="@+id/sign_info_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/roadname_title"
android:layout_below="@id/sign_info_title"
android:layout_marginTop="5dp" />
</RelativeLayout>

View File

@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="lane_info_0" comment="车信普通道路">#FF2271FF</color>
<color name="lane_info_1" comment="车信附加道路">#FF00C800</color>
<color name="lane_info_2" comment="车信公交道路">#FFFFB400</color>
<color name="white" comment="主要按钮,背景等颜色">#FFFFFF</color> <!--白色 -->
<color name="button_press_color" comment="默认的按钮按下去时的背景颜色">#F1EBEB</color>
<color name="default_button_blue_color" comment="蓝色到紫色的渐变开始颜色">#4954ED</color>

View File

@ -79,7 +79,7 @@ dependencies {
implementation "net.sf.kxml:kxml2:2.3.0"
implementation 'org.slf4j:slf4j-api:2.0.7'
implementation project(":vtm-themes")
implementation project(":vtm-android")
api project(":vtm-android")
implementation project(':vtm-extras')
implementation project(":vtm-http")
// implementation "org.mapsforge:vtm-themes:$vtmVersion"
@ -109,10 +109,8 @@ dependencies {
implementation "com.google.protobuf:protobuf-java:3.6.1"
implementation "com.wdtinc:mapbox-vector-tile:3.1.0"
implementation "com.caverock:androidsvg:1.4"
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 project(":vtm-jts")
api 'org.locationtech.jts:jts-core:1.19.0'

View File

@ -1,5 +1,6 @@
package com.navinfo.collect.library.data.entity
import android.os.Parcelable
import com.navinfo.collect.library.system.Constant
import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.collect.library.utils.GeometryToolsKt
@ -8,6 +9,7 @@ import io.realm.RealmObject
import io.realm.RealmSet
import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import kotlinx.parcelize.Parcelize
import org.locationtech.jts.geom.Coordinate
import org.locationtech.jts.geom.Geometry
import org.oscim.core.MercatorProjection
@ -16,13 +18,15 @@ import java.util.*
/**
* 渲染要素对应的实体
* */
open class RenderEntity() : RealmObject() {
@Parcelize
open class RenderEntity() : RealmObject(), Parcelable {
@PrimaryKey
var id: String = UUID.randomUUID().toString() // id
lateinit var name: String //要素名
lateinit var table: String //要素表名
var code: Int = 0 // 要素编码
var geometry: String = "" // 要素渲染参考的geometry该数据可能会在导入预处理环节被修改原始geometry会保存在properties的geometry字段下
var geometry: String =
"" // 要素渲染参考的geometry该数据可能会在导入预处理环节被修改原始geometry会保存在properties的geometry字段下
get() {
wkt = GeometryTools.createGeometry(field)
return field
@ -56,7 +60,7 @@ open class RenderEntity() : RealmObject() {
var tileX: RealmSet<Int> = RealmSet() // x方向的tile编码
var tileY: RealmSet<Int> = RealmSet() // y方向的tile编码
constructor(name: String): this() {
constructor(name: String) : this() {
this.name = name
}
@ -65,9 +69,11 @@ open class RenderEntity() : RealmObject() {
//道路linkId
const val linkPid = "linkPid"
}
object LimitTable {
const val linkPid = "linkPid"
}
object KindCodeTable {
const val linkPid = "linkPid"
}