Controlar el comportamiento de un mapa

La clase MapAction contiene los métodos y las constantes que controlan y modifican un mapa. Por ejemplo, puede establecer el nivel de zoom inicial de un mapa o impedir que los usuarios de dispositivos BlackBerry cambien el nivel de zoom.

Puede utilizar los métodos y las constantes de la clase MapAction para agregar la siguiente funcionalidad a un mapa:

  • Iniciar acciones en un mapa.
  • Defina el comportamiento de las acciones que los usuarios tienen permitido realizar en un mapa.
  • Identificar y responder a los eventos que se producen en un mapa.

Iniciar acciones en un mapa

La clase MapAction ofrece una serie de métodos, cada uno de ellos llamado set<Action>, que puede invocar para realizar acciones en un mapa (por ejemplo, setRotation). Los métodos set determinan si la acción está permitida y, si lo está, cómo se realiza la acción.

Antes de poder invocar uno de estos métodos en un mapa, debe recuperar el objeto MapAction del mapa llamando a getAction(). Por ejemplo, cuando la aplicación abre y muestra el mapa, puede invocar myMap.getAction().setCenterAndZoom(MapPoint center, int zoom) para configurar el centro y el nivel de zoom del mapa.

MapField map = new MapField();
map.getAction().setCenterLatLon( 45.0000, -75.0000 );
map.getAction().setZoom( 0 );

Definir comportamientos personalizados

Cada método set<Action> tiene un método perform<Action> and allow<Action> correspondiente. Los métodos perform personalizan el comportamiento que se produce cuando se realiza una acción. Los métodos allow definen si se permite que las acciones se produzcan. Para utilizar los métodos perform y allow, debe ampliar su clase con MapAction y omitir los métodos apropiados.

El siguiente ejemplo de código muestra cómo omitir performNavigateNext() y performNavigatePrev() para personalizar su comportamiento cuando un usuario pulsa las teclas N (siguiente) o P (anterior). Los métodos invocan super para asegurar que las acciones predeterminadas para estos métodos se siguen invocando, además de las acciones personalizadas que se agregan. Este ejemplo de código también muestra cómo evitar que el usuario haga zoom omitiendo allowSetZoom(int zoom) y devolviendo false.

public class NewMapActions extends MapAction
{
    protected boolean performNavigateNext()
    {
        super.performNavigateNext();
        // Add custom behavior here.
        return true;	
    }
    protected boolean performNavigatePrev()
    {
        super.performNavigatePrev();
        // Add custom behavior here.
        return true;	
    }
    protected boolean allowSetZoom(int zoom)
    {
        return false;	
    }
}

Agregar un objeto MapAction personalizado a un mapa

Una vez que haya creado un nuevo objeto MapAction, puede invocar setAction() en su mapa para aplicar el objeto MapAction personalizado.

NewMapActions action = new NewMapActions();
map.getMapField().setAction(action);

Responder a los cambios en un MapField

Si desea identificar y responder a las acciones que el usuario realiza en un campo de mapa, puede invocar addChangeListener() para registrar el campo de mapa como un servicio de escucha y, a continuación, utilizar las constantes definidas en la clase MapAction. Por ejemplo, MapAction.ACTION_ZOOM_CHANGE indica que el nivel de zoom se ha cambiado.

class MapFieldListener implements FieldChangeListener
{
    public MapFieldListener ()
    {
        MapField map = new MapField();
        map.addChangeListener(this);
    }
    public void fieldChanged( Field field, int actionId )
    {
        switch ( actionId )
        {
            case MapAction.ACTION_CENTRE_CHANGE:
                break;
            case MapAction.ACTION_ZOOM_CHANGE:
                break;
        }
    }
}

¿Le ha resultado útil esta información? Envíenos sus comentarios.