Я работаю над приложением Android, которое использует API Карт Google MapView, MapController, MapActivity и ItemizedOverlay. В основном я пытаюсь воссоздать определенные функции приложения «Карты» (черт побери, Google не предоставляет речевые пузыри - из-за отсутствия лучшего названия - для предметов!), Особенно эти речевые пузыри.
У меня есть невидимая структура XML для речевого пузыря в файле макета XML, содержащем мой MapView. В первый раз, когда я показываю речевой пузырь, я беру этот XML и удаляю его из его текущего родителя, применяя к нему некоторые ItemizedOverlay.LayoutParams, и добавляю его в MapView как наложение. Я помещаю его над выбранным элементом, заполняю его соответствующим текстом, затем устанавливаю его видимым.
Все это прекрасно работает. Цель здесь, однако, также состоит в том, чтобы автоматически анимировать карту, чтобы показать любые части речевого пузыря, которые могут быть вне экрана, когда он открывается. Итак, я пытаюсь popup.getWidth () (popup - это экземпляр моего LinearLayout, который является речевым пузырем) после того, как я выполню все манипуляции с пузырем, даже после того, как я отобразлю его пользователю. Проблема в том, что popup.getWidth () возвращает мне ширину ранее отображаемого всплывающего окна, а не отображаемое в данный момент. Я не могу понять, почему это произойдет, если я получаю ширину после Я устанавливаю ее видимой с ее новыми размерами (которые, кстати, являются относительными, когда я устанавливаю их с LayoutParams: fill_content как для ширины, так и для высоты). Я даже пытался принудить и MapView, и «всплывающее окно» сделать недействительным (), прежде чем пытаться извлечь ширину.
Есть идеи, почему это может происходить? Как я могу заставить Вид переместиться в его новые измерения, прежде чем пытаться получить их?
Спасибо!
Ник