修改在线车辆展示逻辑

在线车辆本期要解决「车机 acc on 卡片展示一个附近车主信息」具体需求描述:

 用户 acc on后,在线车辆卡片自动选中最近的一个车机,但这个自动选中的过程,不将在线车辆卡片放置到顶层。如果用户周围没有其他,则展示默认图。
This commit is contained in:
董宏宇
2020-02-26 19:55:34 +08:00
parent 232daa0373
commit 92035ddc0b

View File

@@ -7,6 +7,7 @@ import android.text.TextUtils;
import android.view.animation.BounceInterpolator;
import android.view.animation.OvershootInterpolator;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.map.MogoLatLng;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarker;
@@ -23,6 +24,7 @@ import com.mogo.module.common.entity.MarkerResponse;
import com.mogo.module.common.entity.MarkerShareMusic;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.MogoServiceProvider;
import com.mogo.module.service.ServiceConst;
import com.mogo.module.service.Utils;
import com.mogo.module.service.datamanager.MogoDataHandler;
@@ -49,17 +51,21 @@ import java.util.Map;
*/
public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessageListener<MarkerResponse> {
private static final String TAG = "MapMarkerManager";
// 第一次请求到地图的Marker数据
private boolean isFirstMarker = false;
// 是否同步在线数据给在线卡片, ACC ON 的标记记录
private boolean isACC_ON = false;
private boolean isSynchronousOnLineData = true;
// 是否选中在线卡片及气泡,语音搜索触发
private boolean isCheckOnLineData = false;
private static Context mContext;
private static IMogoMarker lastMarker;
private static MapMarkerManager mMarkerManager;
private static String mLastHighLightModule = "";
// 记录其它已经缩小的Marker
public static ArrayList<String> alreadySmallMarker = new ArrayList<>();
IMogoMarker nearlyMogoMarker = null;
// 距离用户最近的Marker
private IMogoMarker nearlyMogoMarker = null;
private MapMarkerManager() {
}
@@ -90,16 +96,22 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag
@Override
public void onSwitched(int position, String moduleName) {
Logger.e(TAG, "======moduleName" + moduleName);
if (!isACC_ON) {
isACC_ON = true;
MogoServiceProvider mMogoServiceProvider = (MogoServiceProvider) ARouter.getInstance().build(ServiceConst.PATH_REFRESH_STRATEGY).navigation();
// 刷新 Marker
mMogoServiceProvider.refreshStrategy();
}
Logger.e(TAG, "当前C位卡片" + moduleName);
highlightedMarker(moduleName, false);
mLastHighLightModule = moduleName;
}
});
}
// ACC ON 的时候重置为true
public void setFirstMarker(boolean firstMarker) {
isFirstMarker = firstMarker;
// ACC ON 的时候重置为trueACC OFF 设置为 false
public void setCheckOnLineData(boolean checkOnLineData) {
isACC_ON = checkOnLineData;
}
/**
@@ -226,8 +238,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag
}
mogoMarker.setToTop();
try {
mogoMarker.startScaleAnimation( 0.6f, 1f, 0.6f, 1f,1000, new BounceInterpolator( ) );
} catch( Exception e ){
mogoMarker.startScaleAnimation(0.6f, 1f, 0.6f, 1f, 1000, new BounceInterpolator());
} catch (Exception e) {
Logger.e(TAG, e, "error.");
}
}
@@ -247,7 +259,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag
return;
}
try {
mogoMarker.startScaleAnimation( 1f, 0.6f, 1f, 0.6f,300, new OvershootInterpolator( ) );
mogoMarker.startScaleAnimation(1f, 0.6f, 1f, 0.6f, 300, new OvershootInterpolator());
} catch (Exception e) {
Logger.e(TAG, e, "error.");
}
@@ -310,7 +322,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag
markerCardResult.getDataType().contains(ServiceConst.CARD_TYPE_USER_DATA)) {
MarkerServiceHandler.getMarkerManager().removeMarkers(ServiceConst.CARD_TYPE_USER_DATA);
MarkerServiceHandler.getMogoCardManager().switch2(ServiceConst.CARD_TYPE_USER_DATA);
isFirstMarker = true;
isCheckOnLineData = true;
} else {
// 清空所有地图上绘制的Marker
MarkerServiceHandler.getMarkerManager().removeMarkers();
@@ -362,7 +374,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag
e.printStackTrace();
}
}
Logger.d("点之间距离", "距离当前车辆位置最近的距离为:" + nearlyDistance);
Logger.d(TAG, "距离当前车辆位置最近的距离为:" + nearlyDistance);
fillNumberTrackEventBody(array, 3, onlineCarList.size());
}
@@ -451,12 +463,26 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag
try {
// 在ACC on 之后第一次获取到了在线车辆数据选中最近的一个Marker
if (isFirstMarker) {
if (isCheckOnLineData) {
if (nearlyMogoMarker != null) {
Logger.w(TAG, "ACC ON,或者语音搜索触发,默认选中最近的在线车辆nearlyMogoMarker" + nearlyMogoMarker);
Logger.w(TAG, "语音搜索触发,默认选中最近的在线车辆:" + nearlyMogoMarker);
// 移动地图到指定位置
MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus(ServiceConst.TYPE, true, false);
MarkerServiceHandler.getMapUIController().moveToCenter(nearlyMogoMarker.getPosition());
onMarkerClicked(nearlyMogoMarker);
MogoMarkersHandler.getInstance().onMarkerClicked(nearlyMogoMarker);
isFirstMarker = false;
isCheckOnLineData = false;
}
}
if (isACC_ON && isSynchronousOnLineData) {
isSynchronousOnLineData = false;
if (nearlyMogoMarker != null) {
Logger.w(TAG, "ACC ON 触发,将附近的在线车辆数据同步给卡片:" + nearlyMogoMarker);
openMarker(nearlyMogoMarker);
// 将数据同步给在线用户卡片
MogoDataHandler.getInstance().invoke(ServiceConst.CARD_TYPE_USER_DATA, nearlyMogoMarker);
}
}
} catch (Exception e) {
@@ -557,8 +583,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag
@Override
public void onMsgReceived(final MarkerResponse response) {
Logger.e(TAG, "MarkerResponse======" + response);
if (!MarkerServiceHandler.getMogoStatusManager().isSearchUIShow()) {
Logger.e(TAG, "接收到了地图大而全数据");
if (!MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() && isSynchronousOnLineData) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override