在我的应用程序中,我有一些带有自定义InfoWindow的标记,
蓝色标记不同,当我点击它时,我不希望信息窗口弹出。
所以我尝试使用marker.hideInfoWindow();
来隐藏我的蓝色标记上的infowindow,但它似乎不起作用,因为我得到了我的屏幕上的同一个InfoWindow最后再次弹出蓝色标记标记
map.setInfoWindowAdapter(new InfoWindowAdapter() {
View infoLayout=getLayoutInflater().inflate(R.layout.custominfowindow, null);
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
@Override
public View getInfoContents(Marker marker) {
if(marker.getTitle().equals("destAddr") || marker.getTitle().equals("myPos"))
{
// blue marker code executed here
marker.hideInfoWindow();
}
else
{
SearchUser su = new SearchUser();
Bitmap bm = null;
User user = su.getUserByName(marker.getTitle(), Users);
if(user!=null)
bm = BitmapFactory.decodeFile(user.getImagePath());
ImageView infoImg = (ImageView) infoLayout.findViewById(R.id.infoImg);
TextView infoName = (TextView) infoLayout.findViewById(R.id.infoName);
RatingBar infoRat = (RatingBar) infoLayout.findViewById(R.id.infoRat);
infoName.setText( user.getName() );
infoRat.setRating((float)user.getRating());
infoImg.setImageBitmap(bm);
}
return infoLayout;
}
});
}
答案 0 :(得分:0)
覆盖onMarkerClick,如果您不希望信息窗口显示返回true。
简单的方法是检查onMarkerCLick
中标记中的标题或片段private void setUpMap() {
mMap.setOnMapClickListener(this);
...
@Override
public boolean onMarkerClick(Marker marker) {
return (marker.getTitle()=="Blue")?true:false;
}
可以确定实际蓝色/读取图标的更复杂方法将在onMarkerClick()方法中使用Marker.getId()。向地图添加标记时,将markerId保存在列表或其他内容中。下面我在asynctask publishProgress中添加一个标记到地图并保存markerId。您无法扩展final class markerOptions以添加markerId字段,因此只需创建一个bean。
public class KmlMarkerOptions {
public MarkerOptions markeroptions = new MarkerOptions();
public String id = "";
public KmlMarkerOptions(){
}
}
将标记添加到地图时,将ID保存在MarkerOptions的bean集合中。下面的示例使用asynctask的发布进度,但您可以在代码中的任何位置执行此操作。
protected void onProgressUpdate(KmlMarkerOptions... params) {
Marker marker = mMap.addMarker(params[0].markeroptions);
params[0].id = marker.getId();
}
现在,当点击标记时,从标记中的id找到原始的markerOptions,并确定点击的标记类型。
@Override
public boolean onMarkerClick(Marker marker) {
return showMarker(marker);
}
private boolean showMarker(Marker marker) {
KmlMarkerOptions kmlmo = findKmlMarkerOptions(marker);
if (kmlmo != null) {
// here you could check the type of icon blue/red
// return (kmlmo.markerOptions.icon== blah)?true:false;
// what I'm doing is showing a dialog fragment with all
// kinds of goodies like buttons and active web content
// right over the map like a custominfowindow should be.
// and also moving the map centered on the marker.
FragmentManager fm = getSupportFragmentManager();
KmlMarkerDialogFragment markerWebView = KmlMarkerDialogFragment
.newInstance(kmlmo);
markerWebView.show(fm, "fragment_marker");
mMap.moveCamera(CameraUpdateFactory
.newLatLng(kmlmo.markeroptions.getPosition()));
return true;
}
return false;
}
public KmlMarkerOptions findKmlMarkerOptions(Marker marker) {
if (_kmlmo != null) {
String id = marker.getId();
for (KmlMarkerOptions mo : _kmlmo) {
if (id.equals(mo.id)) {
return mo;
}
}
}
return null;
}
//在竞争对手之前点击一下,因为使用此代码,您可以显示带有活动按钮的真正自定义信息窗口,您可以让评级明星实际处理和访问网络内容,无论您想做什么