У меня та же проблема, что и у вас при использовании библиотеки android-mapviewballoons . Мне нужно полдня, чтобы найти решение. Вот мое исправление:
На вашем CustomItemizedOverlay, давайте сделаем оверлей в boundCenterBottom
public CustomItemizedOverlay(Drawable defaultMarker, MapView mapView) {
super(boundCenterBottom(defaultMarker), mapView);
c = mapView.getContext();
}
А в вашей Map Activty, когда создаете маркер для рисования, позвольте сделать такой трюк (спасибо Кириллу Мотье за его библиотеку Polaris mapview ):
drawable = MapViewUtils.boundMarkerCenterBottom(getResources().getDrawable(R.drawable.map_pin_holed_violet));
MapViewUtils получен из библиотеки Polaris. Вот его функция boundMarkerCenterBottom:
public static Drawable boundMarkerCenterBottom(Drawable marker) {
return boundMarker(marker, Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
}
public static Drawable boundMarker(Drawable marker, int gravity) {
if (marker == null) {
return null;
}
final int width = marker.getIntrinsicWidth();
final int height = marker.getIntrinsicHeight();
if (width < 0 || height < 0) {
throw new IllegalStateException("The given Drawable has no intrinsic width or height");
}
int left, top;
switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
case Gravity.LEFT:
left = 0;
break;
case Gravity.RIGHT:
left = -width;
break;
case Gravity.CENTER_HORIZONTAL:
default:
left = -width / 2;
break;
}
switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) {
case Gravity.TOP:
top = 0;
break;
case Gravity.CENTER_VERTICAL:
top = -height / 2;
break;
case Gravity.BOTTOM:
default:
top = -height;
break;
}
marker.setBounds(left, top, left + width, top + height);
return marker;
}