M0286_Libro Curso

Android

Declaramos el Array , donde pondremos cada uno de los objetos OverlayItem que deseemos en el mapa, el context e instanciamos la clase SeasTuristicLocationZaragoza . Definimos el constructor MiItemizedOverlay , donde definiremos el marcador por defecto para cada uno de los OverlayItems . Para que el Drawable realmente se dibuje, debemos tener sus límites definidos. Lo que queremos es que el punto central en la parte inferior de la imagen coincida con el punto de las coordenadas del mapa. Esto lo realizaremos con el método boundCenterBottom(). Con este método configuramos la capacidad de manejar los eventos touch de los objeto Overlay . Primero necesitamos una referencia a la aplicación Context como miembro de esta clase. Por lo que añadimos Context mContext como miembro de la clase, para posteriormente inicializarlo con un nuevo constructor de la clase. Con el método boundCenterBottomAux() ajustamos una imagen para que el punto 0,0 de ésta, esté en el centro: // de la parte inferior public Drawable boundCenterBottomAux(Drawable marker) { return boundCenterBottom (marker); } Para poder agregar nuevos OverlayItems al ArrayList , crearemos un nuevo método: public void addOverlay(OverlayItem overlay) { // añadimos otra capa de imagen mOverlays.add(overlay); populate(); } Cada vez que agreguemos un nuevo OverlayItem al ArrayList , debemos llamar al método populate() para el ItemizedOverlay , que leerá cada uno de los OverlayItems y los preparará para ser dibujados. Cuando se ejecute el método populate() , llamaremos a CreateItem(int) en el ItemizedOverlay para poder recuperar cada OverlayItem . Tendremos que sobrescribir este método para leer correctamente desde el ArrayList y devolver el OverlayItem de la posición especificada por el entero dado. El método será el siguiente: @Override protected OverlayItem createItem(int i) { // creamos la imagen return mOverlays.get(i); } También debemos sobrescribir el método size() para devolver el número actual de elementos del ArrayList : @Override public int size() { // devolvemos el tamaño del ArrayList return mOverlays.size(); }

270

Made with FlippingBook - Online catalogs