点击Google Map Marker时如何获取其关联的文本内容?
解决Marker点击时获取自定义文本的问题
嘿,我来帮你搞定这个需求!你已经通过IconGenerator给Marker添加了自定义文本,现在要在点击Marker时获取到这个文本(比如示例里的“iqbal”),其实最直接靠谱的方法是给Marker绑定对应的文本数据,具体实现步骤如下:
1. 创建Marker时绑定文本到Tag属性
在你原来的代码里,生成MarkerOptions之后,把要显示的文本(也就是assetName)存到Marker的tag里,这样每个Marker就和它的文本内容关联起来了:
TextView text = new TextView(context); text.setText(" "+assetName+" "); text.setTextColor(context.getResources().getColor(R.color.color_white)); IconGenerator generator = new IconGenerator(context); generator.setColor(context.getResources().getColor(R.color.colorAccent)); generator.setContentView(text); generator.setRotation(360); Bitmap icon = generator.makeIcon(); MarkerOptions tp = new MarkerOptions().position(latLng).icon(BitmapDescriptorFactory.fromBitmap(icon)); // 关键一步:将文本数据绑定到Marker的tag中 tp.tag(assetName); // 添加Marker并保存引用(可选,看你需求) Marker marker = MapFragment.googleMap.addMarker(tp);
2. 设置Marker点击监听,获取绑定的文本
接下来给GoogleMap设置点击监听,在回调方法里取出Marker的tag,强转为String就能拿到你要的文本了:
MapFragment.googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { // 从Marker的tag中取出绑定的文本 String markerText = (String) marker.getTag(); // 这里就可以使用这个文本了,比如判断是否是"iqbal" if ("iqbal".equals(markerText)) { // 执行你需要的操作,比如弹窗提示、跳转页面等 } // 返回false表示让地图处理默认的点击行为(比如显示InfoWindow),返回true则完全自定义处理 return false; } });
为什么要这么做?
因为IconGenerator生成的是Bitmap图片,没办法直接从Bitmap中逆向提取文本内容,所以在创建Marker时直接把文本数据绑定到Marker的tag属性里,是最简便高效的方案,既不用额外存储数据,也能准确关联每个Marker对应的文本。
内容的提问来源于stack exchange,提问作者Ritu Suman Mohanty
相关产品推荐
相关产品推荐

