Pregunta

Estoy trabajando en una aplicación para Android que utiliza la API de Google Maps MapView, MapController, MapActivity y ItemizedOverlay. Básicamente, estoy tratando de recrear ciertas funcionalidades de la aplicación Mapas (Google condenar por no proporcionar burbujas de discurso-a falta de un nombre mejor, para los artículos!), en particular los bocadillos de texto.

Tengo una estructura XML invisibles para el bocadillo en el archivo XML que contiene la disposición de mi MapView. La primera vez que muestro un bocadillo de diálogo que agarrar el XML y lo elimina de su matriz actual, la aplicación de algunas ItemizedOverlay.LayoutParams a ella, y agregarlo a la MapView como una superposición. Coloco por encima del elemento seleccionado, llenarlo con el texto adecuado, luego otra vez en visible.

Todo esto funciona muy bien. El objetivo en este caso, sin embargo, es también animar automáticamente el mapa para revelar las partes de una burbuja de diálogo que puede estar fuera de la pantalla cuando se abre. Así que estoy tratando popup.getWidth () (emergente es la instancia de mi LinearLayout que es el bocadillo) después de hacer toda la manipulación de la burbuja, incluso después de que exhibo al usuario. El problema es que popup.getWidth (me está volviendo el ancho de la ventana emergente mostrada anteriormente), no es el que se muestra actualmente una. No puedo entender por qué esto estaría sucediendo si estoy ir a buscar la anchura después lo fijo a visible con sus nuevas dimensiones (que, por cierto, son relativas cuando les estoy dando con LayoutParams: fill_content de ancho y alto) .. incluso he intentado forzar tanto la MapView y el "emergente" para invalidar () antes de intentar buscar la anchura

.

Cualquier idea por qué esto puede estar sucediendo? ¿Cómo puedo forzar la vista para instalarse en sus nuevas dimensiones antes de tratar de buscarlos?

Gracias! Nick

¿Fue útil?

Solución

llamadas como addView() y invalidate() no suceden inmediatamente. Se puede pensar en él como si esas llamadas crean mensajes que van en una cola de mensajes. Cuando regrese de cualquier devolución de llamada que está en (por ejemplo, onTap()), el hilo principal de la aplicación vuelve a su función normal de mensajes haciendo estallar fuera de esa cola y tratamiento. Por lo tanto, los cambios que está haciendo no tendrán efecto inmediato, pero sólo después de que regrese.

Lo que usted puede intentar hacer es poner su lógica que necesita el ancho de una Runnable y post()-ción que Runnable. Eso lo puso en la cola, presumiblemente después de su addView() y cosas relacionadas. En ese momento, cuando se ejecuta que Runnable, usted debe ser capaz de obtener la anchura correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top