/*** Created by YyyyQ on 2020/3/24*/
public class MainActivity extends AppCompatActivity implementsAMap.OnMarkerClickListener, AMap.InfoWindowAdapter, AMap.OnMapClickListener {private MapView mapView = null;privateAMap aMap;privateUiSettings uiSettings;//存放所有点的经纬度
LatLngBounds.Builder boundsBuilder = newLatLngBounds.Builder();//当前点击的marker
privateMarker clickMaker;//自定义窗体
View infoWindow = null;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView=findViewById(R.id.map);
mapView.onCreate(savedInstanceState);if (aMap == null) {
aMap=mapView.getMap();
uiSettings=aMap.getUiSettings();//设置地图属性
setMapAttribute();
}//模拟数据源
List> list =getData();//循坏在地图上添加自定义marker
for (int i = 0; i < list.size(); i++) {
LatLng latLng= new LatLng(Double.parseDouble(list.get(i).get("latitude")), Double.parseDouble(list.get(i).get("longitude")));
MarkerOptions markerOption= newMarkerOptions();
markerOption.position(latLng);
markerOption.title(list.get(i).get("title"));
markerOption.snippet(list.get(i).get("content"));//自定义点标记的icon图标为drawable文件下图片
markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ditu_yiliao)));
markerOption.draggable(false);
aMap.addMarker(markerOption);//将所有marker经纬度include到boundsBuilder中
boundsBuilder.include(latLng);
}//更新地图状态
aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(boundsBuilder.build(), 10));
}/*** 设置地图属性*/
private voidsetMapAttribute() {//设置默认缩放级别
aMap.moveCamera(CameraUpdateFactory.zoomTo(12));//隐藏的右下角缩放按钮
uiSettings.setZoomControlsEnabled(false);//设置marker点击事件监听
aMap.setOnMarkerClickListener(this);//设置自定义信息窗口
aMap.setInfoWindowAdapter(this);//设置地图点击事件监听
aMap.setOnMapClickListener(this);
}/*** 模拟数据源*/
private List>getData() {
List> list = new ArrayList<>();for (int i = 1; i < 11; i++) {
Map map = new HashMap<>();
map.put("title", "标题NO." +i);
map.put("content", "这是第" + i + "个marker的内容");
map.put("latitude", (43 + Math.random() + "").substring(0, 9));
map.put("longitude", (125 + Math.random() + "").substring(0, 10));
list.add(map);
}returnlist;
}/*** marker点击事件*/@Overridepublic booleanonMarkerClick(Marker marker) {
clickMaker=marker;//点击当前marker展示自定义窗体
marker.showInfoWindow();//返回true 表示接口已响应事,无需继续传递
return true;
}/*** 监听自定义窗口infoWindow事件回调*/@OverridepublicView getInfoWindow(Marker marker) {if (infoWindow == null) {
infoWindow= LayoutInflater.from(this).inflate(R.layout.amap_info_window, null);
}
render(marker, infoWindow);returninfoWindow;
}/*** 自定义infoWindow窗口*/
private voidrender(Marker marker, View infoWindow) {
TextView title=infoWindow.findViewById(R.id.info_window_title);
TextView content=infoWindow.findViewById(R.id.info_window_content);
title.setText(marker.getTitle());
content.setText(marker.getSnippet());
}/*** 不能修改整个InfoWindow的背景和边框,返回null*/@OverridepublicView getInfoContents(Marker marker) {return null;
}/*** 地图点击事件
* 点击地图区域让当前展示的窗体隐藏*/@Overridepublic voidonMapClick(LatLng latLng) {//判断当前marker信息窗口是否显示
if (clickMaker != null &&clickMaker.isInfoWindowShown()) {
clickMaker.hideInfoWindow();
}
}
}