Я пытался сделать что-то похожее - нарисовать на карте воздушные шары в стиле Google Maps с настраиваемыми видами внутри них. Я попытался переопределить draw () для OverlayItem и нарисовать макет, который я определил в XML, таким образом. Проблема заключалась в том, что при переходе View к Drawable для рисования на холсте MapView я потерял все возможности Layout по обработке событий, поэтому такие вещи, как кнопки и т. Д., Не работали должным образом. Если у вас нет каких-либо событий на изображениях, о которых нужно беспокоиться, тогда это может сработать, вам просто нужно накачать свое представление с помощью LayoutInflater текущей активности (activity.getLayoutInflater ()), измерить и разложить его, как описано в разделе Страница «Как Android рисует представления» на сайте разработчиков Android (не удалось опубликовать ссылку из-за ограничений нового пользователя, извините!), И, наконец, вызовите buildDrawingCache () и getDrawingCache () в вашем представлении, чтобы получить его как растровое изображение. Затем его можно нарисовать на холсте, переданном методом draw () созданного вами подкласса Overlay.
Я фактически выбрал второй предложенный вами подход (добавив каждый из них в качестве дочернего представления в MapView, используя MapView.LayoutParams для наведения компоновки над соответствующим OverlayItem), в конце концов. У меня был только один взгляд на ребенка, поэтому я не слишком беспокоился об эффективности здесь, это может быть проблемой для вас, если это действительно то, о чем нужно беспокоиться (хотя, возможно, стоит сначала проверить). Здесь есть небольшая запись того, что я сделал здесь с немного большей детализацией.
Наконец, вы, возможно, захотите взглянуть на подход android-mapviewballoons , который стоит посмотреть.