高德地图自定义点标记大小_Android高德自定义marker点标记与infoWindow窗体

本文介绍如何在Android中自定义高德地图的marker点标记和infoWindow窗体,包括设置marker图标、点击事件及显示自定义内容。通过示例代码详细解析实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义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" />

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值