diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index e086e72179..90b9500ebb 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -4,6 +4,8 @@ import android.content.Context; import android.os.Handler; import android.os.Looper; import android.text.TextUtils; +import android.view.animation.AnticipateOvershootInterpolator; +import android.view.animation.BounceInterpolator; import com.amap.api.maps.model.animation.Animation; import com.amap.api.maps.model.animation.ScaleAnimation; @@ -35,6 +37,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -122,7 +125,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag lastMarkerShowEntity.setChecked(false); lastMarkerShowEntity.setHighlighted(false); - drawMapMarker(lastMarkerShowEntity); + drawMapMarker(lastMarkerShowEntity, true); lastMarker.remove(); } @@ -134,10 +137,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag markerShowEntity.setChecked(true); markerShowEntity.setHighlighted(true); - lastMarker = drawMapMarker(markerShowEntity); - if (lastMarker != null) { - lastMarker.setAlpha(1f); - } + lastMarker = drawMapMarker(markerShowEntity, false); marker.remove(); @@ -192,23 +192,22 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag // 对指定类型高亮处理 public synchronized static void highlightedMarker(final String typeTag) { try { - if (TextUtils.equals(mLastHighLightModule, typeTag)) { return; } // 上一次高亮的变暗 List lastHighLightList = MarkerServiceHandler.getMarkerManager().getMarkers(mLastHighLightModule); - setMarkersAlpha(lastHighLightList, 0.7f); + setMarkersSmall(lastHighLightList); // 将当前高亮 List currentHighLightList = MarkerServiceHandler.getMarkerManager().getMarkers(typeTag); - setMarkersAlpha(currentHighLightList, 1f); + setMarkersBig(currentHighLightList); } catch (Exception e) { e.printStackTrace(); } } - private static void setMarkersAlpha(List markers, float alpha) { + private static void setMarkersBig(List markers) { if (markers == null || markers.isEmpty()) { return; } @@ -216,39 +215,46 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag if (mogoMarker == null || mogoMarker.isDestroyed()) { continue; } - mogoMarker.setAlpha(alpha); + mogoMarker.setToTop(); + try { + // 使用TranslateAnimation,填写一个需要移动的目标点 + ScaleAnimation animationScale = new ScaleAnimation(0.5f, 1f, 0.5f, 1f); + animationScale.setDuration(500); + animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); + animationScale.setInterpolator(new AnticipateOvershootInterpolator()); - if (alpha == 1) { - mogoMarker.setToTop(); - try { - // 使用TranslateAnimation,填写一个需要移动的目标点 - ScaleAnimation animationScale = new ScaleAnimation(0.1f, 1.2f, 0.1f, 1.2f); - animationScale.setDuration(500); - animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); - - // 设置动画 - if (mogoMarker instanceof AMapMarkerWrapper) { - ((AMapMarkerWrapper) mogoMarker).getMarker().setAnimation(animationScale); - ((AMapMarkerWrapper) mogoMarker).getMarker().startAnimation(); - } - } catch (Exception e) { - Logger.e(TAG, e, "error."); + // 设置动画 + if (mogoMarker instanceof AMapMarkerWrapper) { + ((AMapMarkerWrapper) mogoMarker).getMarker().setAnimation(animationScale); + ((AMapMarkerWrapper) mogoMarker).getMarker().startAnimation(); } - } else { - try { - // 使用TranslateAnimation,填写一个需要移动的目标点 - ScaleAnimation animationScale = new ScaleAnimation(1.2f, 0.9f, 1.2f, 0.9f); - animationScale.setDuration(500); - animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); + } catch (Exception e) { + Logger.e(TAG, e, "error."); + } + } + } - // 设置动画 - if (mogoMarker instanceof AMapMarkerWrapper) { - ((AMapMarkerWrapper) mogoMarker).getMarker().setAnimation(animationScale); - ((AMapMarkerWrapper) mogoMarker).getMarker().startAnimation(); - } - } catch (Exception e) { - Logger.e(TAG, e, "error."); + private static void setMarkersSmall(List markers) { + if (markers == null || markers.isEmpty()) { + return; + } + for (IMogoMarker mogoMarker : markers) { + if (mogoMarker == null || mogoMarker.isDestroyed()) { + continue; + } + try { + // 使用TranslateAnimation,填写一个需要移动的目标点 + ScaleAnimation animationScale = new ScaleAnimation(1f, 0.5f, 1f, 0.5f); + animationScale.setDuration(400); + animationScale.setFillMode(Animation.FILL_MODE_FORWARDS); + + // 设置动画 + if (mogoMarker instanceof AMapMarkerWrapper) { + ((AMapMarkerWrapper) mogoMarker).getMarker().setAnimation(animationScale); + ((AMapMarkerWrapper) mogoMarker).getMarker().startAnimation(); } + } catch (Exception e) { + Logger.e(TAG, e, "error."); } } } @@ -306,21 +312,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag List shareMusicList = markerCardResult.getShareMusic(); List noveltyInfoList = markerCardResult.getNoveltyInfo(); -// if (carChatList != null) { -// for (MarkerCarChat markerCarChat : carChatList) { -// MarkerLocation markerLocation = markerCarChat.getLocation(); -// -// MarkerShowEntity markerShowEntity = new MarkerShowEntity(); -// markerShowEntity.setBindObj(markerCarChat); -// markerShowEntity.setMarkerLocation(markerLocation); -// markerShowEntity.setMarkerType(markerCarChat.getType()); -// markerShowEntity.setTextContent(markerCarChat.getUserInfo().getUserName()); -// markerShowEntity.setIconUrl(markerCarChat.getUserInfo().getUserHead()); -// -// drawMapMarker(markerShowEntity); -// } -// } - if (onlineCarList != null) { IMogoMarker nearlyMogoMarker = null; double nearlyDistance = Double.MAX_VALUE; @@ -360,10 +351,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag // 在ACC on 之后第一次获取到了在线车辆数据,选中最近的一个Marker if (isFirstMarker && isOnLineCard) { if (nearlyMogoMarker != null) { -// getMogoCardManager().switch2(ServiceConst.CARD_TYPE_USER_DATA); -// MarkerShowEntity markerShowEntity = (MarkerShowEntity) nearlyMogoMarker.getObject(); -// MarkerOnlineCar markerOnlineCar = (MarkerOnlineCar) markerShowEntity.getBindObj(); -// onLineCarCardViewProvider.updateView(markerOnlineCar); MogoMarkersHandler.getInstance().onMarkerClicked(nearlyMogoMarker); isFirstMarker = false; } @@ -496,13 +483,16 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag * @return 绘制的Marker */ public synchronized IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity) { + return drawMapMarker(markerShowEntity, true); + } + + private synchronized IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity, boolean isSmall) { //Logger.i(TAG, "绘制Marker====drawMapMarker:" + markerShowEntity); try { if (markerShowEntity.getMarkerLocation() != null) { MogoMarkerOptions options = new MogoMarkerOptions() .owner(markerShowEntity.getMarkerType()) - .alpha(0.7f) .object(markerShowEntity) .latitude(markerShowEntity.getMarkerLocation().getLat()) .longitude(markerShowEntity.getMarkerLocation().getLon()); @@ -512,6 +502,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); markerView.setMarker(marker); marker.setOnMarkerClickListener(this); + + if (isSmall) { + List markers = new ArrayList<>(); + markers.add(marker); + setMarkersSmall(markers); + } return marker; } else { Logger.e(TAG, "Location 必须进行初始化!!!!!");