From df512827e24ceece10fc79883eb5bff6e480873a Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 9 Jul 2024 20:25:32 +0800 Subject: [PATCH] =?UTF-8?q?[6.5.0][Opt]=E4=BC=98=E5=8C=96=E8=A1=8C?= =?UTF-8?q?=E7=A8=8B=E6=80=BB=E8=A7=88UI=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/travelreality/EventReqEntity.kt | 7 + .../travelreality/TravelRealityModel.kt | 48 +++++- .../travelreality/TravelRealityService.kt | 2 +- .../travelreality/view/EventVideoView.kt | 48 ++++++ .../core/function/view/TravelRealityView.kt | 146 +++++++++++++++--- .../res/drawable-xhdpi/event_logo_icon.png | Bin 0 -> 2084 bytes .../res/drawable-xhdpi/event_video_bg.png | Bin 0 -> 20353 bytes .../video_marker_place_holder.png | Bin 0 -> 24870 bytes .../res/layout/layout_event_video_maker.xml | 44 ++++++ 9 files changed, 263 insertions(+), 32 deletions(-) create mode 100644 core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/EventReqEntity.kt create mode 100644 core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/view/EventVideoView.kt create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/event_logo_icon.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/event_video_bg.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/video_marker_place_holder.png create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/layout/layout_event_video_maker.xml diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/EventReqEntity.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/EventReqEntity.kt new file mode 100644 index 0000000000..584890c8c4 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/EventReqEntity.kt @@ -0,0 +1,7 @@ +package com.mogo.eagle.core.function.business.travelreality + +data class EventReqEntity( + var points: List, + var cityCode: String = "0734", + var adCode: String = "" +) diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityModel.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityModel.kt index d42452e123..c8395575df 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityModel.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityModel.kt @@ -1,5 +1,14 @@ package com.mogo.eagle.core.function.business.travelreality +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import com.amap.api.maps.model.LatLng +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.GranularRoundedCorners +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.CustomTarget +import com.bumptech.glide.request.transition.Transition import com.mogo.commons.constants.HostConst import com.mogo.eagle.core.data.BaseResponse import com.mogo.eagle.core.data.Response @@ -9,9 +18,8 @@ import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.network.apiCall import com.mogo.eagle.core.network.apiResponseCall import com.mogo.eagle.core.network.request -import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.Md5Util -import retrofit2.http.Query +import me.jessyan.autosize.utils.AutoSizeUtils import java.util.Locale class TravelRealityModel private constructor() { @@ -30,7 +38,7 @@ class TravelRealityModel private constructor() { /** * 查询道路事件 */ - fun getEventsWithTrajRequest(reqData: List, + fun getEventsWithTrajRequest(reqData: EventReqEntity, onSuccess: ((List) -> Unit), onError: ((String) -> Unit)){ request?>>{ loader { @@ -60,7 +68,7 @@ class TravelRealityModel private constructor() { val md5String = "${CROSS_DEVICE.uppercase(Locale.getDefault())}$time" val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() val cityCode = CallerMapUIServiceManager.getCityCode() ?: "0734" - getNetWorkApi(HostConst.getNDEHost()).getCrossDevice(Md5Util.getMD5Result(md5String), time, "", loc.longitude, loc.latitude, "0734") + getNetWorkApi(HostConst.getNDEHost()).getCrossDevice(Md5Util.getMD5Result(md5String), time, "", loc.longitude, loc.latitude, cityCode) } } onSuccess { @@ -83,7 +91,7 @@ class TravelRealityModel private constructor() { val md5String = "${CITY_ROAD_RANGE.uppercase(Locale.getDefault())}$time" val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() val cityCode = CallerMapUIServiceManager.getCityCode() ?: "0734" - getNetWorkApi(HostConst.getNDEHost()).getCityRoadRange(Md5Util.getMD5Result(md5String), time, loc.longitude, loc.latitude, "0734") + getNetWorkApi(HostConst.getNDEHost()).getCityRoadRange(Md5Util.getMD5Result(md5String), time, loc.longitude, loc.latitude, cityCode) } } onSuccess { @@ -106,7 +114,7 @@ class TravelRealityModel private constructor() { val md5String = "${CITY_ROAD_TRACK.uppercase(Locale.getDefault())}$time" val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() val cityCode = CallerMapUIServiceManager.getCityCode() ?: "0734" - getNetWorkApi(HostConst.getNDEHost()).getCityRoadTrack(Md5Util.getMD5Result(md5String), time, loc.longitude, loc.latitude, "0734") + getNetWorkApi(HostConst.getNDEHost()).getCityRoadTrack(Md5Util.getMD5Result(md5String), time, loc.longitude, loc.latitude, cityCode) } } onSuccess { @@ -117,4 +125,32 @@ class TravelRealityModel private constructor() { } } } + + fun downloadImage(context: Context, url: String?, + latLng: LatLng, + onSuccess: ((Bitmap, LatLng) -> Unit), + onFailed: ((LatLng) -> Unit) + ) { + if (url.isNullOrEmpty()) return + val radiusPx = AutoSizeUtils.dp2px(context, 15f).toFloat() + val options = RequestOptions().transform( + GranularRoundedCorners(radiusPx, radiusPx,0f,0f) + ) + Glide.with(context) + .asBitmap() + .apply(options) + .load(url) + .into(object : CustomTarget() { + override fun onResourceReady(resource: Bitmap, transition: Transition?) { + onSuccess(resource, latLng) + } + + override fun onLoadCleared(placeholder: Drawable?) {} + + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) + onFailed(latLng) + } + }) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityService.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityService.kt index 55b30de4bb..afa7315222 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityService.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/TravelRealityService.kt @@ -24,7 +24,7 @@ interface TravelRealityService { suspend fun getEventsWithTrajRequest( @Header("MogoAuthKey") authKey: String, @Header("MogoReqTime") time: String, - @Body reqData: List + @Body reqData: EventReqEntity ): Response> /** diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/view/EventVideoView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/view/EventVideoView.kt new file mode 100644 index 0000000000..7c545d9bb3 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/travelreality/view/EventVideoView.kt @@ -0,0 +1,48 @@ +package com.mogo.eagle.core.function.business.travelreality.view + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Bitmap +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.ImageView +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.map.R + +@SuppressLint("ViewConstructor") +class EventVideoView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0, + private val title: String? = "全息路口" +) : ConstraintLayout ( + context, + attrs, + defStyleAttr +) { + + init { + LayoutInflater.from(context).inflate(R.layout.layout_event_video_maker, this, true) + initView() + } + + private lateinit var videoImgView: ImageView + + private fun initView() { + videoImgView = findViewById(R.id.videoImg) + val titleView = findViewById(R.id.tvTitle) + + title?.let { + titleView.text = it + } + } + + fun setBitmap(bitmap: Bitmap) { + videoImgView.setImageBitmap(bitmap) + } + + fun setPlaceHolder() { + videoImgView.setImageResource(R.drawable.video_marker_place_holder) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt index 911edc3f90..4d8a5fa0b9 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/TravelRealityView.kt @@ -32,13 +32,16 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Liste import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener import com.mogo.eagle.core.function.business.roadcross.net.NDERoadCameraNetWorkModel.Companion.ndeRoadCameraNetWorkModel import com.mogo.eagle.core.function.business.travelreality.CrossDeviceBean +import com.mogo.eagle.core.function.business.travelreality.DeviceInfoBean import com.mogo.eagle.core.function.business.travelreality.EventBean +import com.mogo.eagle.core.function.business.travelreality.EventReqEntity import com.mogo.eagle.core.function.business.travelreality.Point import com.mogo.eagle.core.function.business.travelreality.TravelRealityModel.Companion.travelNetWorkModel +import com.mogo.eagle.core.function.business.travelreality.view.EventVideoView import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.map.R -import com.mogo.eagle.core.function.smp.V2XMarkerView import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils import com.mogo.eagle.core.utilcode.util.LocationUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils @@ -57,6 +60,29 @@ class TravelRealityView @JvmOverloads constructor( ) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoChassisLocationGCJ02Listener, IMoGoPlanningRottingListener { + companion object { + private const val TAG = "TravelRealityView" + + private const val DRAW_POLY_LINE = 1 + private const val DRAW_CAR_LOCATION = 2 + private const val DRAW_ROAD_EVENT = 3 + private const val DRAW_CROSS_DEVICE = 4 + private const val DRAW_ROAD_RANGE = 5 + private const val DRAW_ROAD_TRAJECTORY = 6 + private const val DRAW_GLOBAL_TRAJECTORY = 7 + private const val MOVE_MAP_CAMERA = 8 + private const val DRAW_LIVE_DETAIL = 9 + private const val DRAW_END_MARKER = 10 + private const val UPDATE_VIDEO_MARKER = 11 + + private const val maxRoadRange = 68f + private const val minRoadRange = 52f + private const val maxRoadWidth = 32f + private const val minRoadWidth = 14f + private const val maxGlobalWidth = 20f + private const val minGlobalWidth = 13f + } + private var mContext: Context? = null private var mMapView: TextureMapView? = null @@ -109,6 +135,14 @@ class TravelRealityView @JvmOverloads constructor( private val roadTrajectoryBitmap by lazy { BitmapDescriptorFactory.fromResource(R.drawable.mogo_road_over) } + @Volatile + private var roadRange = minRoadRange + @Volatile + private var roadWidth = minRoadWidth + @Volatile + private var globalWidth = minGlobalWidth + + // // 测试时使用 // private val pointBitmap1 by lazy { @@ -141,6 +175,8 @@ class TravelRealityView @JvmOverloads constructor( @Volatile private var deviceList: List? = null + @Volatile + private var deviceInPathList: List? = null @Volatile private var roadTrackList: List?>?>? = null @@ -157,21 +193,6 @@ class TravelRealityView @JvmOverloads constructor( private var testTime = 0L - companion object { - private const val TAG = "TravelRealityView" - - private const val DRAW_POLY_LINE = 1 - private const val DRAW_CAR_LOCATION = 2 - private const val DRAW_ROAD_EVENT = 3 - private const val DRAW_CROSS_DEVICE = 4 - private const val DRAW_ROAD_RANGE = 5 - private const val DRAW_ROAD_TRAJECTORY = 6 - private const val DRAW_GLOBAL_TRAJECTORY = 7 - private const val MOVE_MAP_CAMERA = 8 - private const val DRAW_LIVE_DETAIL = 9 - private const val DRAW_END_MARKER = 10 - } - init { try { val typedArray = context.obtainStyledAttributes(attrs, R.styleable.TravelRealityView) @@ -334,7 +355,7 @@ class TravelRealityView @JvmOverloads constructor( val boundsBuilder = LatLngBounds.Builder() val globalOptions = PolylineOptions() - globalOptions.width(AutoSizeUtils.dp2px(context, 20f).toFloat()) + globalOptions.width(AutoSizeUtils.dp2px(context, globalWidth).toFloat()) globalOptions.lineJoinType(PolylineOptions.LineJoinType.LineJoinRound) globalOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound) globalOptions.color(globalPathColor) @@ -371,6 +392,23 @@ class TravelRealityView @JvmOverloads constructor( // mAMap?.addMarkers(markerOptionsList1, false) + val distance = LocationUtils.getDistance( + globalData[globalData.size - 1].lat, + globalData[globalData.size - 1].lon, + globalData[0].lat, + globalData[0].lon + ) + Log.w(TAG, "起终点距离为:$distance") + if (distance < 2000) { + roadRange = maxRoadRange + roadWidth = maxRoadWidth + globalWidth = maxGlobalWidth + } else { + roadRange = minRoadRange + roadWidth = minRoadWidth + globalWidth = minGlobalWidth + } + val endOption = MarkerOptions() endOption.icon(BitmapDescriptorFactory.fromResource(endPointDrawable)) endOption.position( @@ -450,6 +488,7 @@ class TravelRealityView @JvmOverloads constructor( eventOptionsList.add(MarkerOptions().apply { position(coordinateConverterWgsToGcj(eventBean.lat, eventBean.lon)) anchor(0.5f, 0.5f) + zIndex(0.8f) icon(BitmapDescriptorFactory.fromResource(R.drawable.mogo_shigu_nor)) }) roadEventList.add(eventBean) @@ -459,6 +498,7 @@ class TravelRealityView @JvmOverloads constructor( eventOptionsList.add(MarkerOptions().apply { position(coordinateConverterWgsToGcj(eventBean.lat, eventBean.lon)) anchor(0.5f, 0.5f) + zIndex(0.8f) icon(BitmapDescriptorFactory.fromResource(R.drawable.mogo_shigong_image)) }) roadEventList.add(eventBean) @@ -468,6 +508,7 @@ class TravelRealityView @JvmOverloads constructor( eventOptionsList.add(MarkerOptions().apply { position(coordinateConverterWgsToGcj(eventBean.lat, eventBean.lon)) anchor(0.5f, 0.5f) + zIndex(0.8f) icon(BitmapDescriptorFactory.fromResource(R.drawable.mogo_yongdu_nor)) }) } @@ -476,6 +517,7 @@ class TravelRealityView @JvmOverloads constructor( eventOptionsList.add(MarkerOptions().apply { position(coordinateConverterWgsToGcj(eventBean.lat, eventBean.lon)) anchor(0.5f, 0.5f) + zIndex(0.8f) icon(BitmapDescriptorFactory.fromResource(R.drawable.mogo_jingzhi_nor)) }) roadEventList.add(eventBean) @@ -485,6 +527,7 @@ class TravelRealityView @JvmOverloads constructor( eventOptionsList.add(MarkerOptions().apply { position(coordinateConverterWgsToGcj(eventBean.lat, eventBean.lon)) anchor(0.5f, 0.5f) + zIndex(0.8f) icon(BitmapDescriptorFactory.fromResource(R.drawable.mogo_jingzhi_nor)) }) roadEventList.add(eventBean) @@ -493,7 +536,7 @@ class TravelRealityView @JvmOverloads constructor( } private fun retryGetCrossDevice() { - val crossDeviceListTmp = deviceList + val crossDeviceListTmp = deviceInPathList if (crossDeviceListTmp.isNullOrEmpty()) { if (retryCount >= 5) return retryCount++ @@ -507,6 +550,7 @@ class TravelRealityView @JvmOverloads constructor( roadEventList.forEach { ipList.add(it.ip ?: "") } + // 轨迹线附近的路口设备取几个进行卡片展示 for (i in crossDeviceListTmp.indices) { if (maxSize > 0 && !crossDeviceListTmp[i].deviceInfoList.isNullOrEmpty()) { crossDeviceListTmp[i].deviceInfoList!![0].deviceIp?.let { @@ -523,16 +567,36 @@ class TravelRealityView @JvmOverloads constructor( } } + /** + * 先下载图片,然后设置给View, + * 再转换成BitmapDescriptor,最后进行渲染 + */ + private fun downloadImage(url: String, latLng: LatLng?) { + if (latLng == null) return + travelNetWorkModel.downloadImage(context, url, latLng, onSuccess = { bitmap, latLng -> + val view = EventVideoView(context) + view.setBitmap(bitmap) + updateVideoMarker(view, latLng) + }, onFailed = { + val view = EventVideoView(context) + view.setPlaceHolder() + updateVideoMarker(view, latLng) + }) + } + private fun reqCrossLive(ipList: MutableList) { ndeRoadCameraNetWorkModel.batchRequestCrossLive(ipList, onSuccess = { val liveOptionsList = ArrayList() var markerOption: MarkerOptions it.forEach { roadCamera -> roadCamera.ip?.let { ip -> + roadCamera.imageUrl?.let { url -> + downloadImage(url, ipPointMap[ip]) + } markerOption = MarkerOptions() markerOption.position(ipPointMap[ip]) markerOption.anchor(0.5f, 0.5f) - markerOption.icon(BitmapDescriptorFactory.fromView(V2XMarkerView(context))) + markerOption.zIndex(0.9f) liveOptionsList.add(markerOption) } } @@ -548,6 +612,7 @@ class TravelRealityView @JvmOverloads constructor( if (crossDeviceList.isEmpty()) return val crossOptionsList = ArrayList() val globalList = reqData + val deviceInPaths = ArrayList() globalList?.forEachIndexed { index, globalPoint -> if (index >= 0 && index < globalList.size - 1) { crossDeviceList.forEach { @@ -563,7 +628,7 @@ class TravelRealityView @JvmOverloads constructor( ) { return@loop } - + deviceInPaths.add(deviceBean) crossOptionsList.add(MarkerOptions().apply { position( coordinateConverterWgsToGcj( @@ -578,6 +643,7 @@ class TravelRealityView @JvmOverloads constructor( } } } + deviceInPathList = arrayListOf(CrossDeviceBean("", 0.0, "", 0.0, deviceInPaths)) // 绘制路口设备 drawMarkers(DRAW_CROSS_DEVICE, crossOptionsList) } @@ -616,7 +682,7 @@ class TravelRealityView @JvmOverloads constructor( val options = PolylineOptions() trajectoryList?.forEach loop@{ trajPointList -> if (trajPointList.isNullOrEmpty() || trajPointList.size < 2) return@loop - options.width(AutoSizeUtils.dp2px(context, 52f).toFloat()) + options.width(AutoSizeUtils.dp2px(context, minRoadRange).toFloat()) options.isUseTexture = true options.lineJoinType(PolylineOptions.LineJoinType.LineJoinRound) options.lineCapType(PolylineOptions.LineCapType.LineCapSquare) @@ -684,7 +750,11 @@ class TravelRealityView @JvmOverloads constructor( // 绘制新的智慧路段轨迹 polylineOptionTmp = PolylineOptions() polylineOptionTmp?.let { optionTmp -> - buildPolylineOption(optionTmp, 52f, roadTrajectoryBitmap) + buildPolylineOption( + optionTmp, + roadRange, + roadTrajectoryBitmap + ) optionTmp.add( coordinateConverterWgsToGcj( trajPointList[1], @@ -737,7 +807,8 @@ class TravelRealityView @JvmOverloads constructor( if (lastIndex < 0 || index - lastIndex > 1) { globalOptionList.add(PolylineOptions().also { optionTmp = it - buildPolylineOptionWithColor(it, 30f, roadTrajectoryColor) + buildPolylineOptionWithColor(it, roadWidth, roadTrajectoryColor) + it.add(coordinateConverterWgsToGcj(point.lat, point.lon)) }) } else { optionTmp?.add(coordinateConverterWgsToGcj(point.lat, point.lon)) @@ -792,6 +863,18 @@ class TravelRealityView @JvmOverloads constructor( } } + private fun updateVideoMarker(view: EventVideoView, latLng: LatLng?) { + if (latLng == null) return + val options = MarkerOptions() + options.position(latLng) + options.icon(BitmapDescriptorFactory.fromView(view)) + Message.obtain().apply { + what = UPDATE_VIDEO_MARKER + obj = options + nonFrequentHandler?.sendMessage(this) + } + } + private fun drawMarkers(type: Int, optionList: ArrayList) { Message.obtain().apply { what = type @@ -869,7 +952,8 @@ class TravelRealityView @JvmOverloads constructor( Log.d(TAG, "Cross device error is:$it") }) // 获取道路事件 - travelNetWorkModel.getEventsWithTrajRequest(reqData!!, onSuccess = { + val cityCode = CallerMapUIServiceManager.getCityCode() ?: "0734" + travelNetWorkModel.getEventsWithTrajRequest(EventReqEntity(pointList, cityCode), onSuccess = { Log.d(TAG, "Events result is:$it") handleRoadEvent(it) }, onError = { @@ -943,7 +1027,7 @@ class TravelRealityView @JvmOverloads constructor( DRAW_LIVE_DETAIL -> { removeMessages(DRAW_LIVE_DETAIL) (msg.obj as ArrayList).apply { -// realDrawLiveMarkers(this) + realDrawLiveMarkers(this) } } @@ -951,6 +1035,10 @@ class TravelRealityView @JvmOverloads constructor( removeMessages(DRAW_END_MARKER) realDrawEndMarker(msg.obj as MarkerOptions) } + + UPDATE_VIDEO_MARKER -> { + realUpdateVideoMarker(msg.obj as MarkerOptions) + } } } catch (e: Exception) { e.printStackTrace() @@ -1077,6 +1165,14 @@ class TravelRealityView @JvmOverloads constructor( } } + private fun realUpdateVideoMarker(options: MarkerOptions) { + liveMarkerList.forEach { + if (it.position == options.position) { + it.setIcon(options.icon) + } + } + } + private fun realDrawEndMarker(options: MarkerOptions) { mEndMarker?.destroy() if (endPointDrawable != -1) { diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/event_logo_icon.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/event_logo_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..37382e6ec94855b449cc960da7a9579e9c8f02cf GIT binary patch literal 2084 zcmV+<2;29GP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91SfB#{1ONa40RR915dZ)H0J39pC;$Klj!8s8R9Fe^S8HrsR}r2$_pW#C z^?P@{iL*_%aoogS=Rpi=ODmeDrL?GS8}PM4qlkwD;s^c1FH{6tAyA9N50Lmn1ro0& z#U`{(r~-o0^qD?n)pfjnBu-+-vFq%v-`;w?d+!?VywB}y~Wx#ygjIj=c0 z-<%6@gFaFV;72<9|LNqLe?ZM3pcN5z@)1k943dO1kb&P{dJ?Br9{YxYS6bs5?b;~$ zb%0+Z!NUbqX93}-!%=twfVG%J0mY9EySBNd1orLYbFZgx_-h_${+4UKEe z-q4!vdT!buG3J5;rtbEysOV`?-0NL!00te7RW zTM=l4^k+ZqI_}gl-i#!V(fQk_3p8=N7=!79}QpHh@jUe`r2PvJ0A%+%%Ptnge$^?yDt71 z2OK>P^FD4rwk1lZx&9;TDtM>_4;)_Y+DjuU_dHSwL}gdHpG{Qke6$KR-0dn!pGfvL z9hH`r_9X&)ZB;?D9!v`3lDe~@@K$8=J7sVd~n?1F{)__NUA>@%6XxrQEB351oM@A=FBZKtSWuGjU~fG#ruFQ6~g6J^0lO) zIU+O+17CuYl}C(fQ!ac#T~=~n$GGHVrIMzSsa(MxTB+KFh!40~MU;|PMPeZZ8Qiq@ zo(Lp{I0QDKg~6#<BQE0F5f0Xe*3PXDOjZEY!6<=Uen=h z|2~IOov*3&0AtpIL@JhUTn>+^Mi>pmq*q%+Wpt25)~Lwh?Lojxxr`BIcr#A%17<(J z80Lt2gl^&4$=H!qzm(3h3SR?_U+(vz_7&04mQarb)N~uZl#wMET{E82NBCthrDZ^4 z&%5Z1%~wm3BfiF-77g3d?0FTgtp2ZMJ;r$0X^e6BFf>GYrTl~soj)m$*FDeDm49#z z{3~&C>3?F~K=$~@vF*Z4&X?DT^Dr1^Yv;;}a>*`_{6nyoa61>C*VH$(PzZ`HU+!2~ zuNoD#&7Gd>*o(>;B@Aop)>h9%x0QXP5JWm_Q+uS8Jn4UM|2BtLpk`;LC$*Lfk1P3y zH*kU3KF(|fKa4f|IjJw_hpU~3UfQR_?8tZ7bEB+RyiOP4Jfi$MK6vp}NA`&~aIt1` z!p=SW9HU&TrWe8+_!-+G37S|}CDAcXl>ELIFX9&m7q2z`hWx*1fqw%J>Lx_}SZ~Py O0000bkad&qJq?F<=g|@i6Yq8+LCAb%Nc+&Ux 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/video_marker_place_holder.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/video_marker_place_holder.png new file mode 100644 index 0000000000000000000000000000000000000000..17ac3e6ce8ee003cc7948f0446cdbc43d37a1fa5 GIT binary patch literal 24870 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 + + + + + + + + + \ No newline at end of file