1,基本需求:需要点击图标突出显示,即放大点击的图标。
2:思路:使用不同的layout,将图标大小设置成需要的大小。
3关键代码:
初始化:
private TextureMapView mapview; private AMap aMap; private MyLocationStyle myLocationStyle; private LatLng mPhoneLatlng; private LatLng startLatlng; private LatLng mDesLatlng = null; private String mDesAddress = ""; private String mStartAddress = ""; private List<Marker> markerList = new ArrayList<>();
private Marker lastClickMarker; private long lastClickTime = 0;
mark点击事件:
@Override public boolean onMarkerClick(Marker marker) { try { Object obj = marker.getObject(); String useRegCode; if (obj != null) { useRegCode = obj.toString();
//更换图标 Marker markerNew = changeMarkerImg(marker, useRegCode, true); curUseRegcode = useRegCode;
//重置上次图标 resetMarker(); lastClickMarker = markerNew; // ToolLog.w("mark", curUseRegcode + "\tmarklist.size:" + markerList.size() + "\nold id:" + marker.getId() + "\t newId:" + lastClickMarker.getId()); ……业务需求 } catch (Exception e) { e.printStackTrace(); showToast("出现错误,请刷新地图"); } return true; }
替换图标代码:
private Marker changeMarkerImg(Marker marker, final String useRegcode, boolean showLarge) {
//获取原设置参数
MarkerOptions options = marker.getOptions();
//回收原图片 options.getIcon().recycle(); int layoutId = showLarge ? R.layout.item_marker_img_large : R.layout.item_marker_img_small; View view = LayoutInflater.from(getActivity()).inflate(layoutId, null); ((ImageView)view.findViewById(R.id.iv_marker)).setImageResource(drawableIdMap.get(useRegcode)); options.icon(BitmapDescriptorFactory.fromView(view)); marker.setMarkerOptions(options); return marker; }
/** * 点击地图 */ private void resetMarker() { try { String lastUseRegcode = lastClickMarker.getObject().toString(); if (lastClickMarker != null && !curUseRegcode.equals(lastUseRegcode)) changeMarkerImg(lastClickMarker, lastUseRegcode, false); } catch (Exception e) { e.printStackTrace(); } }
添加图标代码:
for (int i = 0; i < size; i++) { HttpDeviceLocationEntity.ItemDeviceLocationEntity itemEntity = dataListAll.get(i); String[] locations = itemEntity.getCoordinate().split(","); LatLng latLng = new LatLng(Double.parseDouble(locations[1]), Double.parseDouble(locations[0])); int drawableId = ToolMapUtils.getElevatorDrawableId(itemEntity.getType(), itemEntity.getNextInspectDate(), itemEntity.getMaintainContractEDate()); String useRegCode = dataListAll.get(i).getUseRegCode(); Marker marker = aMap.addMarker(new MarkerOptions() .position(latLng) .icon(BitmapDescriptorFactory.fromResource(drawableId))); marker.setObject(useRegCode); drawableIdMap.put(useRegCode, drawableId); markerList.add(marker); }
效果如下: