From 18317700acceda5cbb2e3c6e19ce002da5ba8afb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 8 Jan 2020 18:13:28 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=BB=98?= =?UTF-8?q?=E5=88=B6=E5=A4=A7=E8=80=8C=E5=85=A8=E7=9A=84Marker=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/service/MarkerServiceHandler.java | 59 ++++++++++++++++++- .../marker/MarkerInfoWindowAdapter.java | 36 +++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index 0f9c08acef..f10ef4d247 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -3,8 +3,15 @@ package com.mogo.module.service; import android.content.Context; import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; +import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.map.navi.IMogoNavi; import com.mogo.module.service.entity.MarkerResponse; +import com.mogo.module.service.marker.MapMarkerInfoView; +import com.mogo.module.service.marker.MapMarkerView; +import com.mogo.module.service.marker.MarkerInfoWindowAdapter; import com.mogo.service.MogoServicePaths; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.connection.IMogoSocketManager; @@ -12,6 +19,10 @@ import com.mogo.service.imageloader.IMogoImageloader; import com.mogo.service.map.IMogoMapService; import com.mogo.utils.logger.Logger; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + /** * author : donghongyu * e-mail : 1358506549@qq.com @@ -20,17 +31,29 @@ import com.mogo.utils.logger.Logger; * version: 1.0 */ public class MarkerServiceHandler { + private static final String TAG = "MarkerServiceHandler"; + + private static MogoMarkerClickListener mogoMarkerClickListener; private static IMogoMapService mMapService; private static IMogoMarkerManager mMarkerManager; + private static IMogoNavi mNavi; + private static IMogoImageloader mImageloader; private static IMogoSocketManager mMogoSocketManager; + private static MarkerInfoWindowAdapter markerInfoWindowAdapter; - public static void init(Context context) { + public static void init(final Context context) { mMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(context); mImageloader = (IMogoImageloader) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_IMAGE_LOADER).navigation(context); mMarkerManager = mMapService.getMarkerManager(context); + mNavi = mMapService.getNavi(context); + markerInfoWindowAdapter = new MarkerInfoWindowAdapter(context, getNavi(), getImageloader()); + + mogoMarkerClickListener = new MogoMarkerClickListener(); + + // 长连接 mMogoSocketManager = (IMogoSocketManager) ARouter.getInstance().build(MogoServicePaths.PATH_SOCKET_MANAGER).navigation(); mMogoSocketManager.registerOnMessageListener(401001, new IMogoOnMessageListener() { @@ -42,6 +65,28 @@ public class MarkerServiceHandler { @Override public void onMsgReceived(MarkerResponse obj) { Logger.e("donghongyu", "===" + obj); + + MapMarkerInfoView mapMarkerInfoView = new MapMarkerInfoView(context); + MapMarkerView mapMarkerView = new MapMarkerView(context); + + ArrayList optionsList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + MogoMarkerOptions options = new MogoMarkerOptions() + .owner(TAG) + .latitude(39.974525d + new Random().nextDouble()) + .longitude(116.41733d + new Random().nextDouble()); + if (i % 2 == 0) { + options.icon(mapMarkerInfoView); + } else { + options.icon(mapMarkerView); + } + optionsList.add(options); + } + List iMogoMarkers = getMarkerManager().addMarkers(TAG, optionsList, true); + for (IMogoMarker iMogoMarker : iMogoMarkers) { + iMogoMarker.setInfoWindowAdapter(markerInfoWindowAdapter); + iMogoMarker.setOnMarkerClickListener(mogoMarkerClickListener); + } } }); @@ -55,6 +100,10 @@ public class MarkerServiceHandler { return mMarkerManager; } + public static IMogoNavi getNavi() { + return mNavi; + } + public static IMogoImageloader getImageloader() { return mImageloader; } @@ -63,4 +112,12 @@ public class MarkerServiceHandler { return mMogoSocketManager; } + + static class MogoMarkerClickListener implements IMogoMarkerClickListener { + + @Override + public boolean onMarkerClicked(IMogoMarker marker) { + return false; + } + } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java new file mode 100644 index 0000000000..385853793f --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java @@ -0,0 +1,36 @@ +package com.mogo.module.service.marker; + +import android.content.Context; +import android.view.View; + +import com.mogo.map.marker.IMogoInfoWindowAdapter; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.navi.IMogoNavi; +import com.mogo.service.imageloader.IMogoImageloader; + +/** + * author : donghongyu + * e-mail : 1358506549@qq.com + * date : 2020-01-0818:11 + * desc : + * version: 1.0 + */ +public class MarkerInfoWindowAdapter implements IMogoInfoWindowAdapter { + + private static final String TAG = "MarkerInfoWindowAdapter"; + + private Context mContext; + private IMogoNavi mNavi; + private IMogoImageloader mImageloader; + + public MarkerInfoWindowAdapter( Context mContext, IMogoNavi mNavi, IMogoImageloader iMogoImageloader ) { + this.mContext = mContext; + this.mNavi = mNavi; + this.mImageloader = iMogoImageloader; + } + + @Override + public View getInfoWindow(IMogoMarker marker) { + return null; + } +} From 8bbb44a8c1dd79571ead71e430abb3f3bdc52343 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Wed, 8 Jan 2020 18:18:20 +0800 Subject: [PATCH 2/7] handle conflict --- .../java/com/mogo/tanlu/map/AMapUtil.java | 268 ++++++++++++ .../java/com/mogo/tanlu/map/ChString.java | 26 ++ .../mogo/tanlu/map/DrivingRouteOverlay.java | 384 ++++++++++++++++++ .../java/com/mogo/tanlu/map/RouteOverlay.java | 236 +++++++++++ 4 files changed, 914 insertions(+) create mode 100755 modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/AMapUtil.java create mode 100755 modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/ChString.java create mode 100755 modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/DrivingRouteOverlay.java create mode 100755 modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/RouteOverlay.java diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/AMapUtil.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/AMapUtil.java new file mode 100755 index 0000000000..45f188e363 --- /dev/null +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/AMapUtil.java @@ -0,0 +1,268 @@ +package com.mogo.tanlu.map; + +import android.text.Html; +import android.text.Spanned; +import android.widget.EditText; + +import com.amap.api.maps.model.LatLng; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.route.BusPath; +import com.amap.api.services.route.BusStep; +import com.amap.api.services.route.RouteBusLineItem; +import com.amap.api.services.route.RouteRailwayItem; +import com.mogo.tanlu.R; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class AMapUtil { + /** + * 判断edittext是否null + */ + public static String checkEditText(EditText editText) { + if (editText != null && editText.getText() != null + && !(editText.getText().toString().trim().equals(""))) { + return editText.getText().toString().trim(); + } else { + return ""; + } + } + + public static Spanned stringToSpan(String src) { + return src == null ? null : Html.fromHtml(src.replace("\n", "
")); + } + + public static String colorFont(String src, String color) { + StringBuffer strBuf = new StringBuffer(); + + strBuf.append("").append(src) + .append(""); + return strBuf.toString(); + } + + public static String makeHtmlNewLine() { + return "
"; + } + + public static String makeHtmlSpace(int number) { + final String space = " "; + StringBuilder result = new StringBuilder(); + for (int i = 0; i < number; i++) { + result.append(space); + } + return result.toString(); + } + + public static String getFriendlyLength(int lenMeter) { + if (lenMeter > 10000) // 10 km + { + int dis = lenMeter / 1000; + return dis + ChString.Kilometer; + } + + if (lenMeter > 1000) { + float dis = (float) lenMeter / 1000; + DecimalFormat fnum = new DecimalFormat("##0.0"); + String dstr = fnum.format(dis); + return dstr + ChString.Kilometer; + } + + if (lenMeter > 100) { + int dis = lenMeter / 50 * 50; + return dis + ChString.Meter; + } + + int dis = lenMeter / 10 * 10; + if (dis == 0) { + dis = 10; + } + + return dis + ChString.Meter; + } + + public static boolean IsEmptyOrNullString(String s) { + return (s == null) || (s.trim().length() == 0); + } + + /** + * 把LatLng对象转化为LatLonPoint对象 + */ + public static LatLonPoint convertToLatLonPoint(LatLng latlon) { + return new LatLonPoint(latlon.latitude, latlon.longitude); + } + + /** + * 把LatLonPoint对象转化为LatLon对象 + */ + public static LatLng convertToLatLng(LatLonPoint latLonPoint) { + return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude()); + } + + /** + * 把集合体的LatLonPoint转化为集合体的LatLng + */ + public static ArrayList convertArrList(List shapes) { + ArrayList lineShapes = new ArrayList(); + for (LatLonPoint point : shapes) { + LatLng latLngTemp = AMapUtil.convertToLatLng(point); + lineShapes.add(latLngTemp); + } + return lineShapes; + } + + /** + * long类型时间格式化 + */ + public static String convertToTime(long time) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(time); + return df.format(date); + } + + public static final String HtmlBlack = "#000000"; + public static final String HtmlGray = "#808080"; + + public static String getFriendlyTime(int second) { + if (second > 3600) { + int hour = second / 3600; + int miniate = (second % 3600) / 60; + return hour + "小时" + miniate + "分钟"; + } + if (second >= 60) { + int miniate = second / 60; + return miniate + "分钟"; + } + return second + "秒"; + } + + //路径规划方向指示和图片对应 + public static int getDriveActionID(String actionName) { + if (actionName == null || actionName.equals("")) { + return R.drawable.dir3; + } + if ("左转".equals(actionName)) { + return R.drawable.dir2; + } + if ("右转".equals(actionName)) { + return R.drawable.dir1; + } + if ("向左前方行驶".equals(actionName) || "靠左".equals(actionName)) { + return R.drawable.dir6; + } + if ("向右前方行驶".equals(actionName) || "靠右".equals(actionName)) { + return R.drawable.dir5; + } + if ("向左后方行驶".equals(actionName) || "左转调头".equals(actionName)) { + return R.drawable.dir7; + } + if ("向右后方行驶".equals(actionName)) { + return R.drawable.dir8; + } + if ("直行".equals(actionName)) { + return R.drawable.dir3; + } + if ("减速行驶".equals(actionName)) { + return R.drawable.dir4; + } + return R.drawable.dir3; + } + + public static int getWalkActionID(String actionName) { + if (actionName == null || actionName.equals("")) { + return R.drawable.dir13; + } + if ("左转".equals(actionName)) { + return R.drawable.dir2; + } + if ("右转".equals(actionName)) { + return R.drawable.dir1; + } + if ("向左前方".equals(actionName) || "靠左".equals(actionName) || actionName.contains("向左前方")) { + return R.drawable.dir6; + } + if ("向右前方".equals(actionName) || "靠右".equals(actionName) || actionName.contains("向右前方")) { + return R.drawable.dir5; + } + if ("向左后方".equals(actionName) || actionName.contains("向左后方")) { + return R.drawable.dir7; + } + if ("向右后方".equals(actionName) || actionName.contains("向右后方")) { + return R.drawable.dir8; + } + if ("直行".equals(actionName)) { + return R.drawable.dir3; + } + if ("通过人行横道".equals(actionName)) { + return R.drawable.dir9; + } + if ("通过过街天桥".equals(actionName)) { + return R.drawable.dir11; + } + if ("通过地下通道".equals(actionName)) { + return R.drawable.dir10; + } + + return R.drawable.dir13; + } + + public static String getBusPathTitle(BusPath busPath) { + if (busPath == null) { + return String.valueOf(""); + } + List busSetps = busPath.getSteps(); + if (busSetps == null) { + return String.valueOf(""); + } + StringBuffer sb = new StringBuffer(); + for (BusStep busStep : busSetps) { + StringBuffer title = new StringBuffer(); + if (busStep.getBusLines().size() > 0) { + for (RouteBusLineItem busline : busStep.getBusLines()) { + if (busline == null) { + continue; + } + + String buslineName = getSimpleBusLineName(busline.getBusLineName()); + title.append(buslineName); + title.append(" / "); + } +// RouteBusLineItem busline = busStep.getBusLines().get(0); + + sb.append(title.substring(0, title.length() - 3)); + sb.append(" > "); + } + if (busStep.getRailway() != null) { + RouteRailwayItem railway = busStep.getRailway(); + sb.append(railway.getTrip() + "(" + railway.getDeparturestop().getName() + + " - " + railway.getArrivalstop().getName() + ")"); + sb.append(" > "); + } + } + return sb.substring(0, sb.length() - 3); + } + + public static String getBusPathDes(BusPath busPath) { + if (busPath == null) { + return String.valueOf(""); + } + long second = busPath.getDuration(); + String time = getFriendlyTime((int) second); + float subDistance = busPath.getDistance(); + String subDis = getFriendlyLength((int) subDistance); + float walkDistance = busPath.getWalkDistance(); + String walkDis = getFriendlyLength((int) walkDistance); + return String.valueOf(time + " | " + subDis + " | 步行" + walkDis); + } + + public static String getSimpleBusLineName(String busLineName) { + if (busLineName == null) { + return String.valueOf(""); + } + return busLineName.replaceAll("\\(.*?\\)", ""); + } + + +} diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/ChString.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/ChString.java new file mode 100755 index 0000000000..8a1b3bc67c --- /dev/null +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/ChString.java @@ -0,0 +1,26 @@ +package com.mogo.tanlu.map; + +public class ChString { + public static final String Kilometer = "\u516c\u91cc";// "公里"; + public static final String Meter = "\u7c73";// "米"; + public static final String ByFoot = "\u6b65\u884c";// "步行"; + public static final String To = "\u53bb\u5f80";// "去往"; + public static final String Station = "\u8f66\u7ad9";// "车站"; + public static final String TargetPlace = "\u76ee\u7684\u5730";// "目的地"; + public static final String StartPlace = "\u51fa\u53d1\u5730";// "出发地"; + public static final String About = "\u5927\u7ea6";// "大约"; + public static final String Direction = "\u65b9\u5411";// "方向"; + + public static final String GetOn = "\u4e0a\u8f66";// "上车"; + public static final String GetOff = "\u4e0b\u8f66";// "下车"; + public static final String Zhan = "\u7ad9";// "站"; + + public static final String cross = "\u4ea4\u53c9\u8def\u53e3"; // 交叉路口 + public static final String type = "\u7c7b\u522b"; // 类别 + public static final String address = "\u5730\u5740"; // 地址 + public static final String PrevStep = "\u4e0a\u4e00\u6b65"; + public static final String NextStep = "\u4e0b\u4e00\u6b65"; + public static final String Gong = "\u516c\u4ea4"; + public static final String ByBus = "\u4e58\u8f66"; + public static final String Arrive = "\u5230\u8FBE";// 到达 +} diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/DrivingRouteOverlay.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/DrivingRouteOverlay.java new file mode 100755 index 0000000000..bb1fc2df84 --- /dev/null +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/DrivingRouteOverlay.java @@ -0,0 +1,384 @@ +package com.mogo.tanlu.map; + +import android.content.Context; +import android.graphics.Color; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.model.BitmapDescriptor; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.LatLngBounds; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.PolylineOptions; +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.route.DrivePath; +import com.amap.api.services.route.DriveStep; +import com.amap.api.services.route.TMC; +import com.mogo.tanlu.R; + +import java.util.ArrayList; +import java.util.List; + + +/** + * 导航路线图层类 + */ +public class DrivingRouteOverlay extends RouteOverlay { + private DrivePath drivePath; + private List throughPointList; + private List throughPointMarkerList = new ArrayList(); + private boolean throughPointMarkerVisible = true; + private List tmcs; + private PolylineOptions mPolylineOptions; + private PolylineOptions mPolylineOptionscolor; + private Context mContext; + private boolean isColorfulline = true; + private float mWidth = 4; + private List mLatLngsOfPath; + + public void setIsColorfulline(boolean iscolorfulline) { + this.isColorfulline = iscolorfulline; + } + + /** + * 根据给定的参数,构造一个导航路线图层类对象。 + * + * @param amap 地图对象。 + * @param path 导航路线规划方案。 + * @param context 当前的activity对象。 + */ + public DrivingRouteOverlay(Context context, AMap amap, DrivePath path, + LatLonPoint start, LatLonPoint end, List throughPointList) { + super(context); + mContext = context; + mAMap = amap; + this.drivePath = path; + startPoint = AMapUtil.convertToLatLng(start); + endPoint = AMapUtil.convertToLatLng(end); + this.throughPointList = throughPointList; + + initBitmapDescriptor(); + } + + public float getRouteWidth() { + return mWidth; + } + + /** + * 设置路线宽度 + * + * @param mWidth 路线宽度,取值范围:大于0 + */ + public void setRouteWidth(float mWidth) { + this.mWidth = mWidth; + } + + /** + * 添加驾车路线添加到地图上显示。 + */ + public void addToMap() { + initPolylineOptions(); + try { + if (mAMap == null) { + return; + } + + if (mWidth == 0 || drivePath == null) { + return; + } + mLatLngsOfPath = new ArrayList(); + tmcs = new ArrayList(); + List drivePaths = drivePath.getSteps(); + mPolylineOptions.add(startPoint); + for (int i = 0; i < drivePaths.size(); i++) { + DriveStep step = drivePaths.get(i); + List latlonPoints = step.getPolyline(); + List tmclist = step.getTMCs(); + tmcs.addAll(tmclist); + addDrivingStationMarkers(step, convertToLatLng(latlonPoints.get(0))); + for (LatLonPoint latlonpoint : latlonPoints) { + mPolylineOptions.add(convertToLatLng(latlonpoint)); + mLatLngsOfPath.add(convertToLatLng(latlonpoint)); + } + } + mPolylineOptions.add(endPoint); + if (startMarker != null) { + startMarker.remove(); + startMarker = null; + } + + if (endMarker != null) { + endMarker.remove(); + endMarker = null; + } +// addStartAndEndMarker(); +// addThroughPointMarker(); + if (isColorfulline && tmcs.size() > 0) { + colorWayUpdate(tmcs); + showcolorPolyline(); + } else { + showPolyline(); + } + + } catch (Throwable e) { + e.printStackTrace(); + } + } + + /** + * 初始化线段属性 + */ + private void initPolylineOptions() { + mPolylineOptions = null; + mPolylineOptions = new PolylineOptions(); + mPolylineOptions.color(getDriveColor()).width(getRouteWidth()); + } + + private void showPolyline() { + addPolyLine(mPolylineOptions); + } + + private void showcolorPolyline() { + addPolyLine(mPolylineOptionscolor); + } + + /** + * 根据不同的路段拥堵情况展示不同的颜色 + * + * @param tmcSection + */ + private void colorWayUpdate(List tmcSection) { + if (mAMap == null) { + return; + } + if (tmcSection == null || tmcSection.size() <= 0) { + return; + } + TMC segmentTrafficStatus; + mPolylineOptionscolor = null; + mPolylineOptionscolor = new PolylineOptions(); + mPolylineOptionscolor.width(getRouteWidth()); + List colorList = new ArrayList(); + List bitmapDescriptors = new ArrayList(); + List points = new ArrayList<>(); + List texIndexList = new ArrayList(); +// mPolylineOptionscolor.add(startPoint); +// mPolylineOptionscolor.add(AMapUtil.convertToLatLng(tmcSection.get(0).getPolyline().get(0))); + + points.add(startPoint); + points.add(AMapUtil.convertToLatLng(tmcSection.get(0).getPolyline().get(0))); + colorList.add(getDriveColor()); + bitmapDescriptors.add(defaultRoute); + + BitmapDescriptor bitmapDescriptor = null; + int textIndex = 0; + texIndexList.add(textIndex); + texIndexList.add(++textIndex); + for (int i = 0; i < tmcSection.size(); i++) { + segmentTrafficStatus = tmcSection.get(i); + int color = getcolor(segmentTrafficStatus.getStatus()); + bitmapDescriptor = getTrafficBitmapDescriptor(segmentTrafficStatus.getStatus()); + List mployline = segmentTrafficStatus.getPolyline(); + for (int j = 0; j < mployline.size(); j++) { +// mPolylineOptionscolor.add(AMapUtil.convertToLatLng(mployline.get(j))); + points.add(AMapUtil.convertToLatLng(mployline.get(j))); + colorList.add(color); + + texIndexList.add(++textIndex); + bitmapDescriptors.add(bitmapDescriptor); + } + } + + points.add(endPoint); + colorList.add(getDriveColor()); + bitmapDescriptors.add(defaultRoute); + texIndexList.add(++textIndex); + mPolylineOptionscolor.addAll(points); + mPolylineOptionscolor.colorValues(colorList); + +// mPolylineOptionscolor.setCustomTextureIndex(texIndexList); +// mPolylineOptionscolor.setCustomTextureList(bitmapDescriptors); + } + + private BitmapDescriptor defaultRoute = null; + private BitmapDescriptor unknownTraffic = null; + private BitmapDescriptor smoothTraffic = null; + private BitmapDescriptor slowTraffic = null; + private BitmapDescriptor jamTraffic = null; + private BitmapDescriptor veryJamTraffic = null; + + private void initBitmapDescriptor() { + defaultRoute = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_6_arrow); + smoothTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_4_arrow); + unknownTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_0_arrow); + slowTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_3_arrow); + jamTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_2_arrow); + veryJamTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_9_arrow); + } + + private BitmapDescriptor getTrafficBitmapDescriptor(String status) { + if (status.equals("畅通")) { + return smoothTraffic; + } else if (status.equals("缓行")) { + return slowTraffic; + } else if (status.equals("拥堵")) { + return jamTraffic; + } else if (status.equals("严重拥堵")) { + return veryJamTraffic; + } else { + return defaultRoute; + } + } + + + private int getcolor(String status) { + if (status.equals("畅通")) { + return Color.GREEN; + } else if (status.equals("缓行")) { + return Color.YELLOW; + } else if (status.equals("拥堵")) { + return Color.RED; + } else if (status.equals("严重拥堵")) { + return Color.parseColor("#990033"); + } else { + return Color.GREEN; + } + } + + public LatLng convertToLatLng(LatLonPoint point) { + return new LatLng(point.getLatitude(), point.getLongitude()); + } + + /** + * @param driveStep + * @param latLng + */ + private void addDrivingStationMarkers(DriveStep driveStep, LatLng latLng) { + addStationMarker(new MarkerOptions() + .position(latLng) + .title("\u65B9\u5411:" + driveStep.getAction() + + "\n\u9053\u8DEF:" + driveStep.getRoad()) + .snippet(driveStep.getInstruction()).visible(nodeIconVisible) + .anchor(0.5f, 0.5f).icon(getDriveBitmapDescriptor())); + } + + @Override + protected LatLngBounds getLatLngBounds() { + LatLngBounds.Builder b = LatLngBounds.builder(); + b.include(new LatLng(startPoint.latitude, startPoint.longitude)); + b.include(new LatLng(endPoint.latitude, endPoint.longitude)); + if (this.throughPointList != null && this.throughPointList.size() > 0) { + for (int i = 0; i < this.throughPointList.size(); i++) { + b.include(new LatLng( + this.throughPointList.get(i).getLatitude(), + this.throughPointList.get(i).getLongitude())); + } + } + return b.build(); + } + + public void setThroughPointIconVisibility(boolean visible) { + try { + throughPointMarkerVisible = visible; + if (this.throughPointMarkerList != null + && this.throughPointMarkerList.size() > 0) { + for (int i = 0; i < this.throughPointMarkerList.size(); i++) { + this.throughPointMarkerList.get(i).setVisible(visible); + } + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + + private void addThroughPointMarker() { + if (this.throughPointList != null && this.throughPointList.size() > 0) { + LatLonPoint latLonPoint = null; + for (int i = 0; i < this.throughPointList.size(); i++) { + latLonPoint = this.throughPointList.get(i); + if (latLonPoint != null) { + throughPointMarkerList.add(mAMap + .addMarker((new MarkerOptions()) + .position( + new LatLng(latLonPoint + .getLatitude(), latLonPoint + .getLongitude())) + .visible(throughPointMarkerVisible) + .icon(getThroughPointBitDes()) + .title("\u9014\u7ECF\u70B9"))); + } + } + } + } + + private BitmapDescriptor getThroughPointBitDes() { + return BitmapDescriptorFactory.fromResource(R.drawable.amap_through); + + } + + /** + * 获取两点间距离 + * + * @param start + * @param end + * @return + */ + public static int calculateDistance(LatLng start, LatLng end) { + double x1 = start.longitude; + double y1 = start.latitude; + double x2 = end.longitude; + double y2 = end.latitude; + return calculateDistance(x1, y1, x2, y2); + } + + public static int calculateDistance(double x1, double y1, double x2, double y2) { + final double NF_pi = 0.01745329251994329; // 弧度 PI/180 + x1 *= NF_pi; + y1 *= NF_pi; + x2 *= NF_pi; + y2 *= NF_pi; + double sinx1 = Math.sin(x1); + double siny1 = Math.sin(y1); + double cosx1 = Math.cos(x1); + double cosy1 = Math.cos(y1); + double sinx2 = Math.sin(x2); + double siny2 = Math.sin(y2); + double cosx2 = Math.cos(x2); + double cosy2 = Math.cos(y2); + double[] v1 = new double[3]; + v1[0] = cosy1 * cosx1 - cosy2 * cosx2; + v1[1] = cosy1 * sinx1 - cosy2 * sinx2; + v1[2] = siny1 - siny2; + double dist = Math.sqrt(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]); + + return (int) (Math.asin(dist / 2) * 12742001.5798544); + } + + + //获取指定两点之间固定距离点 + public static LatLng getPointForDis(LatLng sPt, LatLng ePt, double dis) { + double lSegLength = calculateDistance(sPt, ePt); + double preResult = dis / lSegLength; + return new LatLng((ePt.latitude - sPt.latitude) * preResult + sPt.latitude, (ePt.longitude - sPt.longitude) * preResult + sPt.longitude); + } + + /** + * 去掉DriveLineOverlay上的线段和标记。 + */ + @Override + public void removeFromMap() { + try { + super.removeFromMap(); + if (this.throughPointMarkerList != null + && this.throughPointMarkerList.size() > 0) { + for (int i = 0; i < this.throughPointMarkerList.size(); i++) { + this.throughPointMarkerList.get(i).remove(); + } + this.throughPointMarkerList.clear(); + } + } catch (Throwable e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/RouteOverlay.java b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/RouteOverlay.java new file mode 100755 index 0000000000..af1b169592 --- /dev/null +++ b/modules/mogo-module-tanlu/src/main/java/com/mogo/tanlu/map/RouteOverlay.java @@ -0,0 +1,236 @@ +package com.mogo.tanlu.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Color; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.CameraUpdateFactory; +import com.amap.api.maps.model.BitmapDescriptor; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.LatLngBounds; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.Polyline; +import com.amap.api.maps.model.PolylineOptions; +import com.mogo.tanlu.R; + +import java.util.ArrayList; +import java.util.List; + + +public class RouteOverlay { + protected List stationMarkers = new ArrayList(); + protected List allPolyLines = new ArrayList(); + protected Marker startMarker; + protected Marker endMarker; + protected LatLng startPoint; + protected LatLng endPoint; + protected AMap mAMap; + private Context mContext; + private Bitmap startBit, endBit, busBit, walkBit, driveBit; + protected boolean nodeIconVisible = true; + + public RouteOverlay(Context context) { + mContext = context; + } + + /** + * 去掉BusRouteOverlay上所有的Marker。 + * + * @since V2.1.0 + */ + public void removeFromMap() { + if (startMarker != null) { + startMarker.remove(); + + } + if (endMarker != null) { + endMarker.remove(); + } + for (Marker marker : stationMarkers) { + marker.remove(); + } + for (Polyline line : allPolyLines) { + line.remove(); + } + destroyBit(); + } + + private void destroyBit() { + if (startBit != null) { + startBit.recycle(); + startBit = null; + } + if (endBit != null) { + endBit.recycle(); + endBit = null; + } + if (busBit != null) { + busBit.recycle(); + busBit = null; + } + if (walkBit != null) { + walkBit.recycle(); + walkBit = null; + } + if (driveBit != null) { + driveBit.recycle(); + driveBit = null; + } + } + + /** + * 给起点Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。 + * + * @return 更换的Marker图片。 + * @since V2.1.0 + */ + protected BitmapDescriptor getStartBitmapDescriptor() { + return BitmapDescriptorFactory.fromResource(R.drawable.amap_start); + } + + /** + * 给终点Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。 + * + * @return 更换的Marker图片。 + * @since V2.1.0 + */ + protected BitmapDescriptor getEndBitmapDescriptor() { + return BitmapDescriptorFactory.fromResource(R.drawable.amap_end); + } + + /** + * 给公交Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。 + * + * @return 更换的Marker图片。 + * @since V2.1.0 + */ + protected BitmapDescriptor getBusBitmapDescriptor() { + return BitmapDescriptorFactory.fromResource(R.drawable.amap_bus); + } + + /** + * 给步行Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。 + * + * @return 更换的Marker图片。 + * @since V2.1.0 + */ + protected BitmapDescriptor getWalkBitmapDescriptor() { + return BitmapDescriptorFactory.fromResource(R.drawable.amap_man); + } + + protected BitmapDescriptor getDriveBitmapDescriptor() { + return BitmapDescriptorFactory.fromResource(R.drawable.amap_car); + } + + protected void addStartAndEndMarker() { + startMarker = mAMap.addMarker((new MarkerOptions()) + .position(startPoint).icon(getStartBitmapDescriptor()) + .title("\u8D77\u70B9")); + // startMarker.showInfoWindow(); + + endMarker = mAMap.addMarker((new MarkerOptions()).position(endPoint) + .icon(getEndBitmapDescriptor()).title("\u7EC8\u70B9")); + // mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(startPoint, + // getShowRouteZoom())); + } + + /** + * 移动镜头到当前的视角。 + * + * @since V2.1.0 + */ + public void zoomToSpan() { + if (startPoint != null) { + if (mAMap == null) + return; + try { + LatLngBounds bounds = getLatLngBounds(); + mAMap.animateCamera(CameraUpdateFactory + .newLatLngBounds(bounds, 50)); + } catch (Throwable e) { + e.printStackTrace(); + } + } + } + + protected LatLngBounds getLatLngBounds() { + LatLngBounds.Builder b = LatLngBounds.builder(); + b.include(new LatLng(startPoint.latitude, startPoint.longitude)); + b.include(new LatLng(endPoint.latitude, endPoint.longitude)); + for (Polyline polyline : allPolyLines) { + for (LatLng point : polyline.getPoints()) { + b.include(point); + } + } + return b.build(); + } + + /** + * 路段节点图标控制显示接口。 + * + * @param visible true为显示节点图标,false为不显示。 + * @since V2.3.1 + */ + public void setNodeIconVisibility(boolean visible) { + try { + nodeIconVisible = visible; + if (this.stationMarkers != null && this.stationMarkers.size() > 0) { + for (int i = 0; i < this.stationMarkers.size(); i++) { + this.stationMarkers.get(i).setVisible(visible); + } + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + + protected void addStationMarker(MarkerOptions options) { + if (options == null) { + return; + } + Marker marker = mAMap.addMarker(options); + if (marker != null) { + stationMarkers.add(marker); + } + + } + + protected void addPolyLine(PolylineOptions options) { + if (options == null) { + return; + } + Polyline polyline = mAMap.addPolyline(options); + if (polyline != null) { + allPolyLines.add(polyline); + } + } + + protected float getRouteWidth() { + return 18f; + } + + protected int getWalkColor() { + return Color.parseColor("#6db74d"); + } + + /** + * 自定义路线颜色。 + * return 自定义路线颜色。 + * + * @since V2.2.1 + */ + protected int getBusColor() { + return Color.parseColor("#537edc"); + } + + protected int getDriveColor() { + return Color.parseColor("#537edc"); + } + + // protected int getShowRouteZoom() { + // return 15; + // } +} From cd0b567ec792b1e0bb99dd0e8d635b9e3365c063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 8 Jan 2020 18:43:38 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86Marker=E9=80=82?= =?UTF-8?q?=E9=85=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/service/MarkerServiceHandler.java | 2 +- .../service/marker/MapMarkerInfoView.java | 3 +- .../module/service/marker/MapMarkerView.java | 4 +- .../icon_map_marker_car_blue.png | Bin 0 -> 3394 bytes .../icon_map_marker_car_gray.png | Bin 0 -> 3102 bytes .../icon_map_marker_location_blue.png | Bin 0 -> 902 bytes .../bg_shape_reverse_triangle_blue.xml | 2 - .../src/main/res/layout/view_map_marker.xml | 19 ++++- .../main/res/layout/view_map_marker_info.xml | 70 +++++++++++++----- 9 files changed, 72 insertions(+), 28 deletions(-) create mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_blue.png create mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_gray.png create mode 100644 modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location_blue.png diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index f10ef4d247..1b905d3f87 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -73,7 +73,7 @@ public class MarkerServiceHandler { for (int i = 0; i < 10; i++) { MogoMarkerOptions options = new MogoMarkerOptions() .owner(TAG) - .latitude(39.974525d + new Random().nextDouble()) + .latitude(37.974525d + new Random().nextDouble()) .longitude(116.41733d + new Random().nextDouble()); if (i % 2 == 0) { options.icon(mapMarkerInfoView); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java index 4e2d773096..97223ecf63 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java @@ -6,6 +6,7 @@ import android.view.LayoutInflater; import android.widget.LinearLayout; import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; import com.mogo.module.service.R; @@ -16,7 +17,7 @@ import com.mogo.module.service.R; * desc : 地图Marker图标带文本信息 * version: 1.0 */ -public class MapMarkerInfoView extends LinearLayout { +public class MapMarkerInfoView extends ConstraintLayout { public MapMarkerInfoView(Context context) { super(context); initView(context); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java index d288cfa493..4663420ddf 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java @@ -3,9 +3,9 @@ package com.mogo.module.service.marker; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; -import android.widget.LinearLayout; import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; import com.mogo.module.service.R; @@ -16,7 +16,7 @@ import com.mogo.module.service.R; * desc : 地图Marker图标 * version: 1.0 */ -public class MapMarkerView extends LinearLayout { +public class MapMarkerView extends ConstraintLayout { public MapMarkerView(Context context) { super(context); initView(context); diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_blue.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd9d83a57873901ea07731cee560cf3d8b40e23 GIT binary patch literal 3394 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 Y1Ej2ob;<(T!2kdN07*qoM6N<$f)1l?f&c&j literal 0 HcmV?d00001 diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_gray.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..37eae8f2aba66d79d457d3200dcdf0fdecbd8c50 GIT binary patch literal 3102 zcmV+(4B_*MP)Ht5i9wa#*~bke zcZ@6ovV8gS6$cI+SSi%UrBJ(e?OM~s%&@-@r*QyrdD%ArDayO9UcLIK48v*!Adfxv zSktXrw|cH!yY_dbVF?PFoY}Hb+eaEPREax{*Ih<)&6X`&W@Tk%METj4mX?2Mut&T< z0LjnKZ+z&XhYGfC-P+82U}6GhK5|F70L`ZZUrRou8rysK?)}=_+}yWZzR)X*N^p*o zcuH{Qj$PKvY<@1;IIq0CJo3T(qwN&U5#`R#v(m-_VT@qA@x;YT994CAG6Er2o_=b_FmvIDGi9J^9UV*r_w8ZQBz&Z2i`+ z*rMu69a^(CGo1)eVrts1_x9Vg%DYiVM~Cg-zdryWrPwE8nvc`X&CMrVH#)_n@Mq=j z89E++vc=YJXj15-%!$h#1M%Bs+yB0>?#mtGEsRJPDUMOEcJd9{`bR^YySuyhDH_iZ z5uV4NXtBB3q|GD}mYALn{IgotRn{iW(Z z#SzZ~&G*}EA~hcpiVD#Pr6ys5IU?R*|Mdj}a6uw6IzASBh}X4h)vBKh%q;x@NNsKH zux9hy%w~X;Ra9`Bic&I5T0%-xicfp!+MwHCP$?faD{tLb`+^VM05gtvPfcVDFc;g~ ztZ~&EyVQ1BX;32cM>rvXvU(=RCnBANRES2a?3U^ZfDKUwkPs0!^<^yvi)JcnYqeHyD z+#7NKxYXHhgTq6?hy2VB#3M45&?Z%+9Z-=75n+x55X_Z?R?NMn1;_wt@9nZ74U)mi z*Ze>b;F;2H*{Mm@)VR*((y0l6R394|4Knu<53Zg(U44BvK9O2A*%8T@tPW&mCSh$| z?Y3p}7CV38f-TpjclD~(R=1+gYAUO&x~kfiELjpxShnkFZF-y?H*elFUBInR4tslh zt+TT;oF_!1tFOlrvO6|09_EN9f06vD$O|(!0|=>Mb#bZ zk|O$O4=B}nI?nu5u{xipc5f&M4!6yzZsTkv51nXA>8Qiqf)$11aKWCIAE46EN;8 zfqLAT*W-Mzvtp=2>@lQ8)62?BQb6cansY}4 z(q#b%e67ITKtPFsMFPV80N`U9&0@WyGDlFRpE6!Y&v}#pVVOG^be)zjTOP@(|4tyB z4Nl8+j(9{kcQDMTvYp34(Fes#>O3JLY2&;Nq6ghIA}B6hEFjv@I9ix9DEg?VJI|du zAoxz+2akb3?93dN-Y2~~BZ43Xp`{WIsR0a&PT(*`=?`*l(0P>XIdOvL0PE}PBOPSs z1>%P5maj;sCiVL108vK9+b$0u!eKTKKJx|21|nAOh+u?=4Q#Pa*CDig88a1GGT zw_Qu@+bBU8ZCKf0t5>g%r16~MEEr8rSmmt?R*<|Eg}z|=hE+_Q(-kvwufZ14 ziUV=`l<^%mg2b^crPTdiLO9*Habw0vl?-d_|E(3z=z5S>WRpepI;9gqX`urW16o}WaUmryZ!+FVRE1XTeZUUfux&yU{ zie|1y&V1zPQTNS^y7TV%hUS)9TU$pFB%G9drXJJxi~|RMZ+|=eiH%IoSV!&4Hc_<3 zRYIu)-9}0`S$EBMf*$%@nm_&YQ#*R}Xy9Rw2XY_!-7mEHml2WEr%w-V+qNzIW`;44 zANufp>+J8guHJ4t{>e!zEh^UAUbWR$ZMNEqA}iJ|Jdr50iOGabj~z9PU%GV3y1Kf8 zLsrbLUAyl10gCUnT$r3PfE+n;8{1Thn%+~?bR$@j8l9Nwap?!#hK42j z5_}W+W5nK{7b z$FE-Z-FIKcPaoKU1VAQ|@9HGqp9@5g36gjDcl`MAjhZt*5r7vYrt5ub`K7}gY06PF s8R?^~`9}CZRQa1dd-nW063$WiKaaoEY%PjhasU7T07*qoM6N<$f}^Da>;M1& literal 0 HcmV?d00001 diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location_blue.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..34823616ee8c32d4f0fb7250193d71774127f271 GIT binary patch literal 902 zcmV;119|+3P)Px&KuJVFR9FekSWRmbK@ff2v#U!q5d#}V*Fe^gDB=f#Ab9a6c=za4Fp9q+KSCpT z_2@6~=0)%%eju6<_YfD+EGQ-#R(EIHenWbh9cQX%!mjLGrl+gw)tl++uBuTecwJpK zr7tZUG73`&v9D`TR%Mh4V>;-R6gmj-M;UA#t>VYCWz{X>LgiIHd)plDXjD5rOy;$r zURh(i+(YZ_L-jq6otMy=C3Dacsf8g9}XeDelyb=_`s;H(~F6cHB*EgTV|g|FS;c)z`g7wa$aCT!c2D#uk(SarLvDIUOrswg4`u_PsO z(JUb(C2nm=UPR`_vRpLl83~lnlUZfn1_& z&%Q|lq>LrRUP!s}!-wxU^iPI`yXI7$-iui~S)ipkW6b0&(AcxB-B(e8)~^`Z#Mye& zTf*|w+pK+Wm?bQIyO-*JAx@lJGAD-K7&=c`ciT9ATv4B#IEo?nz>d-v;7)fKclx5w zIMx6mwzqccHQ2<(l}0h9kH}Y|r5;!^=Xk7IX-8_Tel|E#ypPTAm^dkp$L5DslGtv1 cjqI1+UyQ?TKlvdqSpWb407*qoM6N<$g5 - - diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml index c831059662..0d3b1ffbe3 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml @@ -1,9 +1,11 @@ - + android:orientation="vertical" + tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout" > @@ -27,4 +28,14 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - \ No newline at end of file + + + \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml index c4e0a7e62c..48b96abba9 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker_info.xml @@ -1,32 +1,66 @@ - + android:orientation="horizontal" + tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout" > - + app:layout_constraintTop_toTopOf="parent" > + + + + + + - \ No newline at end of file + app:layout_constraintEnd_toEndOf="@+id/llMarkerContent" + app:layout_constraintStart_toStartOf="@+id/llMarkerContent" + app:layout_constraintTop_toBottomOf="@+id/llMarkerContent" /> + + + \ No newline at end of file From a89cc03705374de756e4b140429aff46661cc460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 8 Jan 2020 20:10:40 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86Marker=E9=80=82?= =?UTF-8?q?=E9=85=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/service/MarkerServiceHandler.java | 17 ++++++++++++----- .../service/marker/MarkerInfoWindowAdapter.java | 5 +++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index 1b905d3f87..6217524a05 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -17,6 +17,7 @@ import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.connection.IMogoSocketManager; import com.mogo.service.imageloader.IMogoImageloader; import com.mogo.service.map.IMogoMapService; +import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; import java.util.ArrayList; @@ -75,11 +76,12 @@ public class MarkerServiceHandler { .owner(TAG) .latitude(37.974525d + new Random().nextDouble()) .longitude(116.41733d + new Random().nextDouble()); - if (i % 2 == 0) { - options.icon(mapMarkerInfoView); - } else { - options.icon(mapMarkerView); - } +// if (i % 2 == 0) { +// options.icon(mapMarkerInfoView); +// } else { +// options.icon(mapMarkerView); +// } + options.icon(mapMarkerInfoView); optionsList.add(options); } List iMogoMarkers = getMarkerManager().addMarkers(TAG, optionsList, true); @@ -113,10 +115,15 @@ public class MarkerServiceHandler { } + /** + * 地图上的Marker点击回调 + */ static class MogoMarkerClickListener implements IMogoMarkerClickListener { @Override public boolean onMarkerClicked(IMogoMarker marker) { + TipToast.shortTip("点击了大而全中的Marker"); + return false; } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java index 385853793f..6aac1ddb47 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java @@ -23,7 +23,7 @@ public class MarkerInfoWindowAdapter implements IMogoInfoWindowAdapter { private IMogoNavi mNavi; private IMogoImageloader mImageloader; - public MarkerInfoWindowAdapter( Context mContext, IMogoNavi mNavi, IMogoImageloader iMogoImageloader ) { + public MarkerInfoWindowAdapter(Context mContext, IMogoNavi mNavi, IMogoImageloader iMogoImageloader) { this.mContext = mContext; this.mNavi = mNavi; this.mImageloader = iMogoImageloader; @@ -31,6 +31,7 @@ public class MarkerInfoWindowAdapter implements IMogoInfoWindowAdapter { @Override public View getInfoWindow(IMogoMarker marker) { - return null; + MapMarkerInfoView mapMarkerInfoView = new MapMarkerInfoView(mContext); + return mapMarkerInfoView; } } From 1fd50969cbbb4e9040a93e055138083b1cca7dd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 8 Jan 2020 20:10:50 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86Marker=E9=80=82?= =?UTF-8?q?=E9=85=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/config.gradle b/config.gradle index 27940105bc..c1d0b932b7 100644 --- a/config.gradle +++ b/config.gradle @@ -95,6 +95,7 @@ ext { mogoconnection : "com.mogo.connection:mogo-connection:${MOGO_CONNECTION_VERSION}", moduleextensions : "com.mogo.module:module-extensions:${MOGO_MODULE_EXTENSIONS_VERSION}", modulechatting : "com.mogo.module.carchatting:module-carchatting:${CARCHATTING_VERSION}", + // 在线车辆 moduleonlinecar : "com.mogo.module:module-onlinecar:${MOGO_MODULE_ONLINECAR_VERSION}", // 长链 From 5fe6725e2d69229959a09faf579d577d4f963acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 8 Jan 2020 20:17:03 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=AF=B9=E5=A4=96=E5=BC=80=E6=94=BE?= =?UTF-8?q?=E4=BA=86=E7=BB=98=E5=88=B6marker=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/service/MarkerServiceHandler.java | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index 6217524a05..8f7bbcaf3b 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -9,7 +9,6 @@ import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.navi.IMogoNavi; import com.mogo.module.service.entity.MarkerResponse; -import com.mogo.module.service.marker.MapMarkerInfoView; import com.mogo.module.service.marker.MapMarkerView; import com.mogo.module.service.marker.MarkerInfoWindowAdapter; import com.mogo.service.MogoServicePaths; @@ -20,8 +19,6 @@ import com.mogo.service.map.IMogoMapService; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; -import java.util.ArrayList; -import java.util.List; import java.util.Random; /** @@ -44,7 +41,10 @@ public class MarkerServiceHandler { private static IMogoSocketManager mMogoSocketManager; private static MarkerInfoWindowAdapter markerInfoWindowAdapter; + private static Context mContext; + public static void init(final Context context) { + mContext = context; mMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(context); mImageloader = (IMogoImageloader) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_IMAGE_LOADER).navigation(context); mMarkerManager = mMapService.getMarkerManager(context); @@ -67,27 +67,8 @@ public class MarkerServiceHandler { public void onMsgReceived(MarkerResponse obj) { Logger.e("donghongyu", "===" + obj); - MapMarkerInfoView mapMarkerInfoView = new MapMarkerInfoView(context); - MapMarkerView mapMarkerView = new MapMarkerView(context); - - ArrayList optionsList = new ArrayList<>(); for (int i = 0; i < 10; i++) { - MogoMarkerOptions options = new MogoMarkerOptions() - .owner(TAG) - .latitude(37.974525d + new Random().nextDouble()) - .longitude(116.41733d + new Random().nextDouble()); -// if (i % 2 == 0) { -// options.icon(mapMarkerInfoView); -// } else { -// options.icon(mapMarkerView); -// } - options.icon(mapMarkerInfoView); - optionsList.add(options); - } - List iMogoMarkers = getMarkerManager().addMarkers(TAG, optionsList, true); - for (IMogoMarker iMogoMarker : iMogoMarkers) { - iMogoMarker.setInfoWindowAdapter(markerInfoWindowAdapter); - iMogoMarker.setOnMarkerClickListener(mogoMarkerClickListener); + drawMapMarker(); } } @@ -127,4 +108,18 @@ public class MarkerServiceHandler { return false; } } + + + public static void drawMapMarker() { + MapMarkerView mapMarkerView = new MapMarkerView(mContext); + + MogoMarkerOptions options = new MogoMarkerOptions() + .icon(mapMarkerView) + .owner(TAG) + .latitude(38.574525d + new Random().nextDouble()) + .longitude(115.41733d + new Random().nextDouble()); + IMogoMarker marker = getMarkerManager().addMarker(TAG, options); + marker.setInfoWindowAdapter(markerInfoWindowAdapter); + marker.setOnMarkerClickListener(mogoMarkerClickListener); + } } From c6b8eed6141b47530c45ec89690fee39351001cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Wed, 8 Jan 2020 20:26:43 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E7=BB=98=E5=88=B6marker=E7=9A=84=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/launcher/MogoApplication.java | 3 ++- .../mogo/module/service/MarkerServiceHandler.java | 15 +++++++++++++-- .../service/marker/MarkerInfoWindowAdapter.java | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 941198c975..3af687459b 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -8,6 +8,7 @@ import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; +import com.mogo.module.onlinecar.OnLineCarConstants; import com.mogo.tanlu.constant.TanluConstants; /** @@ -24,8 +25,8 @@ public class MogoApplication extends AbsMogoApplication { // MogoModulePaths.addModule( new MogoModule( DemoConstants.TAG, "CARD_DEMO" ) ); // MogoModulePaths.addModule( new MogoModule( Demo2Constants.TAG, "CARD_DEMO2" ) ); DebugConfig.setNetMode( DebugConfig.NET_MODE_QA ); + MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, "CARD_TYPE_ROAD_ONLINECAR")); MogoModulePaths.addModule( new MogoModule( TanluConstants.TAG, "CARD_TYPE_ROAD_CODITION" ) ); -// MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, "CARD_TYPE_ROAD_ONLINECAR")); // MogoModulePaths.addModule(new MogoModule( CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index 8f7bbcaf3b..7e57af5d2c 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -8,6 +8,7 @@ import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.navi.IMogoNavi; +import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.service.entity.MarkerResponse; import com.mogo.module.service.marker.MapMarkerView; import com.mogo.module.service.marker.MarkerInfoWindowAdapter; @@ -36,6 +37,7 @@ public class MarkerServiceHandler { private static IMogoMapService mMapService; private static IMogoMarkerManager mMarkerManager; private static IMogoNavi mNavi; + private static IMogoMapUIController mMapUIController; private static IMogoImageloader mImageloader; private static IMogoSocketManager mMogoSocketManager; @@ -50,6 +52,7 @@ public class MarkerServiceHandler { mMarkerManager = mMapService.getMarkerManager(context); mNavi = mMapService.getNavi(context); markerInfoWindowAdapter = new MarkerInfoWindowAdapter(context, getNavi(), getImageloader()); + mMapUIController = mMapService.getMapUIController(); mogoMarkerClickListener = new MogoMarkerClickListener(); @@ -87,6 +90,10 @@ public class MarkerServiceHandler { return mNavi; } + public static IMogoMapUIController getMapUIController() { + return mMapUIController; + } + public static IMogoImageloader getImageloader() { return mImageloader; } @@ -111,15 +118,19 @@ public class MarkerServiceHandler { public static void drawMapMarker() { + TipToast.shortTip("绘制Marker"); + MapMarkerView mapMarkerView = new MapMarkerView(mContext); MogoMarkerOptions options = new MogoMarkerOptions() .icon(mapMarkerView) .owner(TAG) - .latitude(38.574525d + new Random().nextDouble()) - .longitude(115.41733d + new Random().nextDouble()); + .latitude(39.574525d + new Random().nextDouble()) + .longitude(116.21733d + new Random().nextDouble()); IMogoMarker marker = getMarkerManager().addMarker(TAG, options); marker.setInfoWindowAdapter(markerInfoWindowAdapter); marker.setOnMarkerClickListener(mogoMarkerClickListener); + + getMapUIController().changeZoom(false); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java index 6aac1ddb47..37173150b2 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MarkerInfoWindowAdapter.java @@ -7,6 +7,7 @@ import com.mogo.map.marker.IMogoInfoWindowAdapter; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.navi.IMogoNavi; import com.mogo.service.imageloader.IMogoImageloader; +import com.mogo.utils.logger.Logger; /** * author : donghongyu @@ -31,6 +32,7 @@ public class MarkerInfoWindowAdapter implements IMogoInfoWindowAdapter { @Override public View getInfoWindow(IMogoMarker marker) { + Logger.e(TAG,"getInfoWindow===="); MapMarkerInfoView mapMarkerInfoView = new MapMarkerInfoView(mContext); return mapMarkerInfoView; }