自定义marker与infowindow窗体
1.展示地图布局的xml
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2.activity自定义marker与infowindow(代码注释详细)
/**
* created by yyyyq on 2020/3/24
*/
public class mainactivity extends appcompatactivity implements amap.onmarkerclicklistener, amap.infowindowadapter, amap.onmapclicklistener {
private mapview mapview = null;
private amap amap;
private uisettings uisettings;
//存放所有点的经纬度
latlngbounds.builder boundsbuilder = new latlngbounds.builder();
//当前点击的marker
private marker clickmaker;
//自定义窗体
view infowindow = null;
@override
protected void oncreate(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 = new markeroptions();
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 void setmapattribute() {
//设置默认缩放级别
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);
}
return list;
}
/**
* marker点击事件
*/
@override
public boolean onmarkerclick(marker marker) {
clickmaker = marker;
//点击当前marker展示自定义窗体
marker.showinfowindow();
//返回true 表示接口已响应事,无需继续传递
return true;
}
/**
* 监听自定义窗口infowindow事件回调
*/
@override
public view getinfowindow(marker marker) {
if (infowindow == null) {
infowindow = layoutinflater.from(this).inflate(r.layout.amap_info_window, null);
}
render(marker, infowindow);
return infowindow;
}
/**
* 自定义infowindow窗口
*/
private void render(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
*/
@override
public view getinfocontents(marker marker) {
return null;
}
/**
* 地图点击事件
* 点击地图区域让当前展示的窗体隐藏
*/
@override
public void onmapclick(latlng latlng) {
//判断当前marker信息窗口是否显示
if (clickmaker != null && clickmaker.isinfowindowshown()) {
clickmaker.hideinfowindow();
}
}
}
3.自定义infowindow窗体布局
android:layout_width="160dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/infowindow"
android:orientation="vertical">
android:id="@+id/info_window_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="5dp"
android:textcolor="#333"
android:textsize="14sp" />
android:id="@+id/info_window_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="5dp"
android:textcolor="#333"
android:textsize="12sp" />
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!