Steuern des Verhaltens einer Karte

Die Klasse MapAction enthält die Methoden und Konstanten zur Steuerung und Änderung einer Karte. Zum Beispiel können Sie den anfänglichen Vergrößerungsfaktor einer Karte festlegen oder BlackBerry-Gerätebenutzer daran hindern, den Vergrößerungsfaktor zu ändern.

Sie können die Methoden und Konstanten in der MapAction-Klasse verwenden, um einer Karte die folgende Funktionalität hinzuzufügen:

  • Initiieren von Aktionen auf einer Karte
  • Definieren Sie das Verhalten für Aktionen, die Benutzer auf einer Karte ausführen dürfen.
  • Identifizieren Sie Ereignisse, die auf einer Karte auftreten, und reagieren Sie auf sie.

Initiieren von Aktionen auf einer Karte

Die MapAction-Klasse stellt einen Satz von Methoden bereit (jeweils set<Action> genannt), die Sie aufrufen können, um Aktionen auf einer Karte auszuführen (z. B. setRotation). Die set-Methoden bestimmen, ob die Aktion zulässig ist, und falls ja, wie die Aktion ausgeführt wird.

Bevor Sie eine dieser Methoden auf einer Karte aufrufen können, müssen Sie das MapAction-Objekt von der Karte durch Aufrufen von getAction() abrufen. Wird die Anwendung z. B. geöffnet und zeigt die Karte, können Sie myMap.getAction().setCenterAndZoom(MapPoint center, int zoom) aufrufen, um die Mitte und den Vergrößerungsfaktor der Karte festzulegen.

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

Definieren von benutzerdefinierte Verhaltensweisen

Jede set<Action>-Methode verfügt über eine entsprechende perform<Action> and allow<Action>-Methode. Die perform-Methoden passen das Verhalten an, das auftritt, wenn eine Aktion ausgeführt wird. Die allow-Methoden definieren, ob Aktionen auftreten dürfen. Um die Methoden perform und allow zu verwenden, müssen Sie Ihre Klasse mit MapAction erweitern und die entsprechenden Methoden außer Kraft setzen.

Das folgende Codebeispiel zeigt, wie Sie die performNavigateNext() und performNavigatePrev() außer Kraft setzen, um ihr Verhalten anzupassen, wenn ein Benutzer die Taste N (vor) oder P (zurück) drückt. Die Methoden rufen super auf, um sicherzustellen, dass die Standardaktionen für diese Methoden zusätzlich zu den hinzugefügten benutzerdefinierten Aktionen immer noch aufgerufen werden. Dieses Codebeispiel zeigt auch, wie Sie den Benutzer am Vergrößern verhindern können, indem Sie allowSetZoom(int zoom) außer Kraft setzen und false zurückgeben.

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

Hinzufügen eines benutzerdefinierten MapAction-Objekts zu einer Karte

Nachdem Sie ein neues MapAction-Objekt erstellt haben, können Sie auf Ihrer Karte setAction() aufrufen, um das benutzerdefinierte MapAction-Objekt anzuwenden.

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

Reagieren auf Änderungen in einem MapField

Wenn Sie die Aktionen der Benutzer in einem Kartenfeld identifizieren und auf sie reagieren möchten, können Sie addChangeListener() aufrufen, um das Kartenfeld als Listener zu registrieren, und anschließend die Konstanten verwenden, die in der MapAction-Klasse definiert sind. Zum Beispiel zeigt MapAction.ACTION_ZOOM_CHANGE an, dass der Vergrößerungsfaktor geändert wurde.

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

Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.