opt
This commit is contained in:
@@ -3,6 +3,7 @@ package com.mogo.module.service.marker;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.animation.BounceInterpolator;
|
||||
import android.view.animation.OvershootInterpolator;
|
||||
|
||||
@@ -257,20 +258,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭 Marker 详情
|
||||
*
|
||||
* @param marker 要关闭的Marker
|
||||
*/
|
||||
public synchronized void closeMarkerSelect( IMogoMarker marker ) {
|
||||
// 将上次选中 Marker 设置为未选中状态
|
||||
if ( marker != null ) {
|
||||
Logger.i( TAG, "closeMarkerSelect 将出Marker详情关闭:" + marker );
|
||||
closeMarker( marker );
|
||||
mLastCheckMarker = null;
|
||||
}
|
||||
}
|
||||
|
||||
// 展开气泡
|
||||
private void openMarker( IMogoMarker mogoMarker ) {
|
||||
if ( mogoMarker == null ) {
|
||||
@@ -358,7 +345,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
} else {
|
||||
mLastCheckMarker = null;
|
||||
// 清空所有地图上绘制的Marker
|
||||
MarkerServiceHandler.getMarkerManager().removeMarkers();
|
||||
MarkerServiceHandler.getMarkerManager().removeMarkersExcept( ModuleNames.CARD_TYPE_USER_DATA );
|
||||
}
|
||||
|
||||
drawMarkerByCurrentType( mLastDataResult );
|
||||
@@ -402,29 +389,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION;
|
||||
}
|
||||
|
||||
List< MarkerOnlineCar > onlineCarList = markerCardResult.getOnlineCar();
|
||||
List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay();
|
||||
List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic();
|
||||
List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo();
|
||||
|
||||
switch ( mCurrentModuleName ) {
|
||||
case ServiceConst.CARD_TYPE_BUSINESS_OPERATION:
|
||||
drawAllMarker( markerCardResult );
|
||||
break;
|
||||
case ServiceConst.CARD_TYPE_NOVELTY:
|
||||
drawNoveltyMarker( noveltyInfoList, ServiceConst.MAX_AMOUNT_SINGLE_CARD );
|
||||
break;
|
||||
// case ServiceConst.CARD_TYPE_CARS_CHATTING:
|
||||
// case ServiceConst.CARD_TYPE_USER_DATA:
|
||||
// drawOnlineCarMarkers(onlineCarList, ServiceConst.MAX_AMOUNT_SINGLE_CARD);
|
||||
// break;
|
||||
case ServiceConst.CARD_TYPE_ROAD_CONDITION:
|
||||
drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_SINGLE_CARD );
|
||||
break;
|
||||
case ServiceConst.CARD_TYPE_SHARE_MUSIC:
|
||||
drawShareMusicMarker( shareMusicList, ServiceConst.MAX_AMOUNT_SINGLE_CARD );
|
||||
break;
|
||||
}
|
||||
drawAllMarker( markerCardResult );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -457,6 +422,9 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
|
||||
double nearlyDistance = Float.MAX_VALUE;
|
||||
int size = getAppropriateSize( maxAmount, onlineCarList );
|
||||
|
||||
Map< String, IMogoMarker > existCarMap = purgeCarsData( onlineCarList );
|
||||
|
||||
for ( int i = 0; i < size; i++ ) {
|
||||
MarkerOnlineCar markerOnlineCar = onlineCarList.get( i );
|
||||
MarkerLocation markerLocation = markerOnlineCar.getLocation();
|
||||
@@ -470,9 +438,15 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
markerShowEntity.setIconUrl( markerOnlineCar.getUserInfo().getUserHead() );
|
||||
}
|
||||
|
||||
IMogoMarker iMogoMarker = drawMapMarker( markerShowEntity );
|
||||
// iMogoMarker.setInfoWindowAdapter(this);
|
||||
startSmooth( iMogoMarker, markerOnlineCar, markerLocation );
|
||||
if ( markerOnlineCar.getUserInfo() == null || TextUtils.isEmpty( markerOnlineCar.getUserInfo().getSn() ) ) {
|
||||
continue;
|
||||
}
|
||||
IMogoMarker mogoMarker = existCarMap.get( markerOnlineCar.getUserInfo().getSn() );
|
||||
if ( mogoMarker == null ) {
|
||||
Logger.d( TAG, "car [%s] need be create.", markerOnlineCar.getUserInfo().getSn() );
|
||||
mogoMarker = drawMapMarker( markerShowEntity );
|
||||
}
|
||||
startSmooth( mogoMarker, markerOnlineCar, markerLocation );
|
||||
|
||||
// 计算在线车辆距离当前车辆的距离,每次都与最后一次距离最近的进行比较,保留距离最近的车辆,进行卡片展示
|
||||
try {
|
||||
@@ -489,7 +463,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
// 进行比较,保留最近的一个数据
|
||||
if ( calculateDistance < nearlyDistance ) {
|
||||
nearlyDistance = calculateDistance;
|
||||
mNearlyMarker = iMogoMarker;
|
||||
mNearlyMarker = mogoMarker;
|
||||
}
|
||||
|
||||
} catch ( Exception e ) {
|
||||
@@ -519,6 +493,66 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据新的在线车辆列表,选出已存在的在线车辆,并从视图和内存中移除不存在的在线车辆
|
||||
*
|
||||
* @param newCarsList
|
||||
* @return
|
||||
*/
|
||||
private Map< String, IMogoMarker > purgeCarsData( List< MarkerOnlineCar > newCarsList ) {
|
||||
|
||||
final long start = System.currentTimeMillis();
|
||||
Map< String, IMogoMarker > existCarsMap = new HashMap<>();
|
||||
List< IMogoMarker > allCarsList = MarkerServiceHandler.getMarkerManager().getMarkers( ModuleNames.CARD_TYPE_USER_DATA );
|
||||
if ( allCarsList == null || allCarsList.isEmpty() ) {
|
||||
return existCarsMap;
|
||||
}
|
||||
if ( newCarsList == null || newCarsList.isEmpty() ) {
|
||||
return existCarsMap;
|
||||
}
|
||||
|
||||
Map< String, IMogoMarker > allCarsMap = new HashMap<>();
|
||||
for ( IMogoMarker marker : allCarsList ) {
|
||||
String sn = getCarSnFromMarker( marker );
|
||||
Logger.d( TAG, "sn = [%s]", sn );
|
||||
allCarsMap.put( sn, marker );
|
||||
}
|
||||
for ( MarkerOnlineCar markerOnlineCar : newCarsList ) {
|
||||
String sn = markerOnlineCar.getUserInfo().getSn();
|
||||
if ( allCarsMap.containsKey( sn ) ) {
|
||||
Logger.d( TAG, " car [%s] is cached.", sn );
|
||||
existCarsMap.put( sn, allCarsMap.get( sn ) );
|
||||
}
|
||||
}
|
||||
for ( String sn : allCarsMap.keySet() ) {
|
||||
if ( !existCarsMap.containsKey( sn ) ) {
|
||||
IMogoMarker dirtyMarker = allCarsMap.get( sn );
|
||||
allCarsList.remove( dirtyMarker );
|
||||
dirtyMarker.destroy();
|
||||
Logger.d( TAG, " car [%s] is destroy.", sn );
|
||||
}
|
||||
}
|
||||
allCarsMap.clear();
|
||||
Logger.i( "timer", "purge data cost " + ( System.currentTimeMillis() - start ) + "ms" );
|
||||
return existCarsMap;
|
||||
}
|
||||
|
||||
private String getCarSnFromMarker( IMogoMarker marker ) {
|
||||
if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) {
|
||||
return null;
|
||||
}
|
||||
if ( !( marker.getObject() instanceof MarkerShowEntity ) ) {
|
||||
return null;
|
||||
}
|
||||
if ( !( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() instanceof MarkerOnlineCar ) ) {
|
||||
return null;
|
||||
}
|
||||
if ( ( ( MarkerOnlineCar ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() ).getUserInfo() == null ) {
|
||||
return null;
|
||||
}
|
||||
return ( ( MarkerOnlineCar ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() ).getUserInfo().getSn();
|
||||
}
|
||||
|
||||
/**
|
||||
* 探路数据
|
||||
*
|
||||
@@ -869,7 +903,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
|
||||
if ( result == null ) {
|
||||
return;
|
||||
}
|
||||
removeCarMarkers();
|
||||
|
||||
List< MarkerOnlineCar > onlineCarList = result.getOnlineCar();
|
||||
if ( !MarkerServiceHandler.getMogoStatusManager().isADASShow() ) {
|
||||
dispatchDataToBis( ServiceConst.CARD_TYPE_USER_DATA, onlineCarList == null ? new ArrayList<>() : onlineCarList );
|
||||
|
||||
Reference in New Issue
Block a user