android 个地图中的多个标记点击事件
Multiple marker Click event in android maps
我的 google 地图 activity 中有一些标记代表一些商店位置。我需要为每个标记编写点击事件,以便我可以为每个商店打开相应的站点。我正在使用以下代码添加标记。
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
for(int i = 0 ; i < shop.size() ; i++ ) {
createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
}
mMap.setOnMarkerClickListener(ShoppingPage.this);
}
protected Marker createMarker(double latitude, double longitude, String title, String snippet, int iconResID) {
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 9f));
myMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.anchor(0.5f, 0.5f)
.title(title)
.snippet(snippet)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_city_black_24dp)));
return myMarker;
}
当我尝试将点击监听器添加到标记时,我无法将点击监听器添加到所有 them.I 只能将点击事件添加到最后添加的标记。但我需要为地图中的每个标记制作点击事件。请帮我。这是我的点击事件代码。
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(myMarker))
{
//handle click here
Log.d("title",""+ marker.getTitle());
Log.d("position",""+ marker.getPosition());
}
return true;
}
在 onMarkerClick(...) 中,
"if (marker.equals(myMarker))"
意味着 onMarkerClick 只对 myMarker 做任何事情。
myMarker 引用最后创建的标记,因为每当调用 createMarker 时它都会被覆盖。
所以建议是去掉"if (marker.equals(myMarker))"
使用这个:
首先让你的应用实现GoogleMap.OnMarkerClickListener然后创建一个标记数组:
Marker[] marker = new Marker[20]; //change length of array according to you
然后里面
onMapReady(){
mMap.setOnMarkerClickListener(this);
for(int i = 0 ; i < shop.size() ; i++ ) {
marker[i] = createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
}
然后终于
@Override
public boolean onMarkerClick(Marker marker) {
//you can get assests of the clicked marker
return false;
}
希望对您有所帮助!!!
这是错误的:
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(myMarker))
{
//handle click here
Log.d("title",""+ marker.getTitle());
Log.d("position",""+ marker.getPosition());
}
return true;
}
应该是:
public boolean onMarkerClick(final Marker marker) {
return true;
}
和 marker
变量表示单击了哪个标记。顺便说一句,你的问题毫无意义,你可以先设置断点,如果看到你错了,所有标记都有响应。
此外,我更喜欢这样的东西:
googleMap.setOnMarkerClickListener(marker ->
{
/*Do what you need with clicked marker*/
return true;
});
给每个标记一个 OnClickListener
.setOnClickListener(getOnClickAction());
比起处理点击的 OnClickListener。
View.OnClickListener getOnClickAction(){
return new View.OnClickListener(){
public void onClick(View v){
//Handle Click
v.getTitle(position);
}
};
}
基本上 setOnMarkerClickListner 检测您点击了哪个标记。
如果您没有为标记设置任何标题,我有一种方法可以识别单击了哪个标记。
首先,创建一个标记 Map,以标记 object 作为键,标记名称作为值。
private Map<Marker, String> markerMap = new HashMap<>();
然后,将所需的标记添加到 地图 object。
marker = gMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
markerMap.put(marker,gymDataHolder.getTitle());
之后,使用setOnMarkerClickListner
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(context, markerMap.get(marker), Toast.LENGTH_SHORT).show();
return true;
}
});
在地图上添加标记时您可以像这样为每个标记设置标签作为商店
marker= mGoogleMap!!.addMarker(MarkerOptions().position(latLng)
.title(user.name)
.icon({Your shop icon})
marker.tag=shop
然后你可以在标记上实现点击监听器
override fun onMarkerClick(p0: Marker?): Boolean {
if(p0?.tag==null) return false
var shop=(p0?.tag) as Shop
Toast.makeText(context,shop?.name,Toast.LENGTH_SHORT).show()
return true
}
我的 google 地图 activity 中有一些标记代表一些商店位置。我需要为每个标记编写点击事件,以便我可以为每个商店打开相应的站点。我正在使用以下代码添加标记。
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
for(int i = 0 ; i < shop.size() ; i++ ) {
createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
}
mMap.setOnMarkerClickListener(ShoppingPage.this);
}
protected Marker createMarker(double latitude, double longitude, String title, String snippet, int iconResID) {
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 9f));
myMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.anchor(0.5f, 0.5f)
.title(title)
.snippet(snippet)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_city_black_24dp)));
return myMarker;
}
当我尝试将点击监听器添加到标记时,我无法将点击监听器添加到所有 them.I 只能将点击事件添加到最后添加的标记。但我需要为地图中的每个标记制作点击事件。请帮我。这是我的点击事件代码。
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(myMarker))
{
//handle click here
Log.d("title",""+ marker.getTitle());
Log.d("position",""+ marker.getPosition());
}
return true;
}
在 onMarkerClick(...) 中,
"if (marker.equals(myMarker))"
意味着 onMarkerClick 只对 myMarker 做任何事情。
myMarker 引用最后创建的标记,因为每当调用 createMarker 时它都会被覆盖。
所以建议是去掉"if (marker.equals(myMarker))"
使用这个:
首先让你的应用实现GoogleMap.OnMarkerClickListener然后创建一个标记数组:
Marker[] marker = new Marker[20]; //change length of array according to you
然后里面
onMapReady(){
mMap.setOnMarkerClickListener(this);
for(int i = 0 ; i < shop.size() ; i++ ) {
marker[i] = createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
}
然后终于
@Override
public boolean onMarkerClick(Marker marker) {
//you can get assests of the clicked marker
return false;
}
希望对您有所帮助!!!
这是错误的:
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(myMarker))
{
//handle click here
Log.d("title",""+ marker.getTitle());
Log.d("position",""+ marker.getPosition());
}
return true;
}
应该是:
public boolean onMarkerClick(final Marker marker) {
return true;
}
和 marker
变量表示单击了哪个标记。顺便说一句,你的问题毫无意义,你可以先设置断点,如果看到你错了,所有标记都有响应。
此外,我更喜欢这样的东西:
googleMap.setOnMarkerClickListener(marker ->
{
/*Do what you need with clicked marker*/
return true;
});
给每个标记一个 OnClickListener
.setOnClickListener(getOnClickAction());
比起处理点击的 OnClickListener。
View.OnClickListener getOnClickAction(){
return new View.OnClickListener(){
public void onClick(View v){
//Handle Click
v.getTitle(position);
}
};
}
基本上 setOnMarkerClickListner 检测您点击了哪个标记。
如果您没有为标记设置任何标题,我有一种方法可以识别单击了哪个标记。
首先,创建一个标记 Map,以标记 object 作为键,标记名称作为值。
private Map<Marker, String> markerMap = new HashMap<>();
然后,将所需的标记添加到 地图 object。
marker = gMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
markerMap.put(marker,gymDataHolder.getTitle());
之后,使用setOnMarkerClickListner
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(context, markerMap.get(marker), Toast.LENGTH_SHORT).show();
return true;
}
});
在地图上添加标记时您可以像这样为每个标记设置标签作为商店
marker= mGoogleMap!!.addMarker(MarkerOptions().position(latLng)
.title(user.name)
.icon({Your shop icon})
marker.tag=shop
然后你可以在标记上实现点击监听器
override fun onMarkerClick(p0: Marker?): Boolean {
if(p0?.tag==null) return false
var shop=(p0?.tag) as Shop
Toast.makeText(context,shop?.name,Toast.LENGTH_SHORT).show()
return true
}