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);
}
效果如下: