我一直在寻找有关实施OnMarkerClickListener的帮助,但我发现的一切都没有效果。这是我下面的标记,点击它只会改变颜色(浅蓝色)。我正在寻找它打开一个更大的窗口,以便我可以提供更多信息。这可能吗?
googlemap.addMarker(new MarkerOptions()
.position(new LatLng(49.378,-0.3904))
.title("Hello World")
.snippet("This is my test app")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
标记在我的地图上工作正常,但现在我想点击标记,并打开一个新的活动/页面或更大的窗口,更容易使用。由于我是制作应用程序的真正新手,如果有人成功获得了一个有效的例子,请你提供链接或代码。
提前致谢!
修改 的
从建议的教程中我改变了一些MainActivity.java。
我已在OnMarkerClickListener中添加并选择将未实现的方法添加到公共类
public class MainActivity extends Activity implements LocationListener, OnMarkerClickListener {
在private void setUpMap()下面我添加了我的代码:private Marker myMarker,setonMarkerclick listener和myMarker =,:
private Marker myMarker;
{
googlemap.setOnMarkerClickListener(this);
myMarker = googlemap.addMarker(new MarkerOptions()
.position(new LatLng(LatLng))
.title("Hello World")
.snippet("My First App")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
}
在底部未实现的方法中,我有:
@Override
public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub
return false;
我需要在公共布尔OnMarkerClick部分更改什么? 我没有得到任何错误,但它只是没有工作。我还需要添加或更改什么?
感谢任何帮助!
答案 0 :(得分:31)
标记点击事件
Don't snap to marker after click in android map v2
引自上述帖子
您可以使用OnMarkerClickListener
收听标记上的点击事件。要在地图上设置此侦听器,请调用GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)。当用户单击标记时,将调用onMarkerClick(Marker)并将标记作为参数传递。此方法返回一个布尔值,指示您是否已使用该事件(即,您要禁止默认行为)。如果返回false,则除了自定义行为外,还会发生默认行为。标记点击事件的默认行为是显示其信息窗口(如果可用)并移动相机,使标记在地图上居中。
在标记上使用OnMarkerClickListener。
检查代码段的链接
Google Maps API v2: How to make markers clickable?
示例:在我的手机上正常工作
Marker source, destination; GoogleMap mMap; mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); source = mMap.addMarker(new MarkerOptions() .position(sc) .title("MyHome") .snippet("Bangalore") .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin))); destination = mMap.addMarker(new MarkerOptions() .position(lng) .title("MapleBear Head Office") .snippet("Jayanager") .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin))); mMap.setOnMarkerClickListener(marker -> { if (marker.getTitle().equals("MyHome")) // if marker source is clicked Toast.makeText(MainActivity.this, marker.getTitle(), Toast.LENGTH_SHORT).show();// display toast return true; });
答案 1 :(得分:10)
此代码处理制造商点击事件并使用一些信息加载新布局(XML):
/**
* adding individual markers, displaying text on on marker click on a
* bubble, action of on marker bubble click
*/
private final void addLocationsToMap() {
int i = 0;
for (Stores store : storeList) {
LatLng l = new LatLng(store.getLatitude(), store.getLongtitude());
MarkerOptions marker = new MarkerOptions()
.position(l)
.title(store.getStoreName())
.snippet("" + i)
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
googleMap.addMarker(marker);
++i;
}
googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
try {
popUpWindow.setVisibility(View.VISIBLE);
Stores store = storeList.get(Integer.parseInt(marker
.getSnippet()));
// set details
email.setText(store.getEmail());
phoneNo.setText(store.getPhone());
address.setText(store.getAddress());
// setting test value to phone number
tempString = store.getPhone();
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0,
spanString.length(), 0);
phoneNo.setText(spanString);
// setting test value to email
tempStringemail = store.getEmail();
SpannableString spanString1 = new SpannableString(tempStringemail);
spanString1.setSpan(new UnderlineSpan(), 0, spanString1.length(), 0);
email.setText(spanString1);
storeLat = store.getLatitude();
storelng = store.getLongtitude();
} catch (ArrayIndexOutOfBoundsException e) {
Log.e("ArrayIndexOutOfBoundsException", " Occured");
}
}
});
}
答案 2 :(得分:6)
如果您需要活动在市场中点击,此代码就是解决方案。
private GoogleMap mGoogleMap;
mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
{
@Override
public boolean onMarkerClick(Marker arg0) {
if(arg0 != null && arg0.getTitle().equals(markerOptions2.getTitle().toString())); // if marker source is clicked
Toast.makeText(menu.this, arg0.getTitle(), Toast.LENGTH_SHORT).show();// display toast
return true;
}
});
祝你好运
答案 3 :(得分:0)
我建议使用OnInfoWindowClickListener,它会在您单击标记然后单击代码段时触发。 使用setTag将带有标记的任何对象附加。
Marker marker = mMap.addMarker(markerOptions);
marker.setTag(myObject);
和听众
mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker arg0) {
MyObject mo = (MyObject )arg0.getTag();
}
});
答案 4 :(得分:0)
下面的代码用于用户点击标记执行任何操作时用于Kotlin
googleMap!!.setOnMarkerClickListener { marker ->
if (marker.title == "Marker1")
Log.d(TAG, "Clicked on Marker1")
true
}