Controlar o comportamento de um mapa

A classe MapAction contém os métodos e constantes que controlam e modificam um mapa. Por exemplo, você pode definir o nível inicial de zoom de um mapa ou impedir que usuários de aparelhos BlackBerry alterem o nível de zoom.

Você pode usar os métodos e constantes na classe MapAction para adicionar a seguinte funcionalidade a um mapa:

  • Iniciar ações em um mapa.
  • Defina o comportamento para ações que os usuários podem executar em um mapa.
  • Identifique e responda aos eventos que ocorrem em um mapa.

Iniciar ações em um mapa

A classe MapAction fornece um conjunto de métodos, cada um chamado de set<Action>, que você pode chamar para executar ações em um mapa (por exemplo, setRotation). Os métodos set determinam se a ação é permitida e, em caso afirmativo, como ela deve ser executada.

Antes que você possa chamar um destes métodos em um mapa, você deve obter o objeto MapAction do mapa chamando getAction(). Por exemplo, quando o aplicativo abre e exibe o mapa, você pode chamar myMap.getAction().setCenterAndZoom(MapPoint center, int zoom) para definir o centro e o nível de zoom do mapa.

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

Definir comportamentos personalizados

Cada método set<Action> tem um método perform<Action> and allow<Action> correspondente. Os métodos perform permitem que você personalize o comportamento que ocorre quando uma ação é executada. Os métodos allow definem se as ações podem ocorrer. Para usar os métodos perform e allow, você deve estender sua classe com MapAction e substituir os métodos apropriados.

O exemplo de código a seguir demonstra como substituir os métodos performNavigateNext() e performNavigatePrev() para adicionar comportamento personalizado quando um usuário pressionar as teclas N (próximo) ou P (anterior). Os métodos chamam super para assegurar que as ações padrão destes métodos ainda sejam chamadas, além das ações personalizadas que são adicionadas. Este exemplo de código também demonstra como evitar a aplicação de zoom ao substituir allowSetZoom(int zoom) e retornar 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;	
    }
}

Adicionar um objeto personalizado de MapAction a um mapa

Depois que você cria um novo objeto MapAction, pode chamar setAction() em seu mapa e aplicar o objeto personalizado MapAction.

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

Responder a alterações em MapField

Se você deseja identificar e responder às ações que o usuário executa em um campo de mapa, pode chamar addChangeListener() para registrar o campo de mapa como um ouvinte e, em seguida, usar as constantes que são definidas na classe MapAction. Por exemplo, MapAction.ACTION_ZOOM_CHANGE indica que o nível de zoom foi alterado.

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;
        }
    }
}

Estas informações foram úteis? Gostaríamos de receber seus comentários.