지도의 동작 제어

MapAction 클래스에는 지도를 제어하고 수정하는 메소드와 상수가 포함되어 있습니다. 예를 들어, 지도의 초기 확대/축소 수준을 직접 설정할 수 있거나, BlackBerry 단말기 사용자가 확대/축소 수준을 변경하지 못하게 할 수 있습니다.

MapAction 클래스의 메소드와 상수를 사용하면 다음 기능을 지도에 추가할 수 있습니다.

  • 지도에서 작업 시작
  • 사용자가 지도에서 수행할 수 있는 작업에 대한 동작 정의
  • 지도에서 발생하는 이벤트에 대한 식별 및 응답

지도에서 작업 시작

MapAction 클래스는 각각 set<Action>이라는 일련의 메소드를 제공하므로 이를 호출하여 지도에서 작업을 수행할 수 있습니다(예: setRotation). set 메소드는 작업을 허용할지, 그리고 허용할 경우에 작업을 어떻게 수행할지 결정합니다.

지도에서 이러한 메소드 중 하나를 호출하기 전에 getAction()을 호출하여 지도로부터 MapAction 객체를 가져와야 합니다. 예를 들어, 프로그램이 열리면서 지도를 표시할 때 myMap.getAction().setCenterAndZoom(MapPoint center, int zoom)을 호출하여 지도의 중심과 확대/축소 수준을 설정할 수 있습니다.

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

사용자 정의 동작 정의하기

set<Action> 메소드에는 해당하는 perform<Action> and allow<Action> 메소드가 있습니다. perform 메소드는 작업이 수행될 때 발생하는 동작을 사용자 정의합니다. allow 메소드는 작업 발생 허용 여부를 정의합니다. performallow 메소드를 사용하려면 MapAction으로 클래스를 확장하고 해당 메소드를 재정의해야 합니다.

다음 코드 샘플은 사용자가 N(다음) 또는 P(이전) 키를 누를 때 수행될 동작을 사용자 정의하기 위해 performNavigateNext()performNavigatePrev()를 재정의하는 방법을 보여줍니다. 메소드는 super를 호출하여 이러한 메소드에 대한 기본 동작 및 추가된 사용자 정의 동작이 여전히 호출되도록 합니다. 이 코드 샘플은 또한 allowSetZoom(int zoom)을 재정의하고 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;	
    }
}

지도에 사용자 정의 MapAction 객체 추가하기

MapAction 객체를 만들면 지도에서 setAction()를 호출하여 사용자 정의된 MapAction 객체를 적용할 수 있습니다.

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

MapField의 변경 사항에 응답하기

지도 필드에서 사용자가 수행하는 동작을 식별하고 사용자 정의하려는 경우, addChangeListener()를 호출하여 지도 필드를 수신기로 등록한 다음 MapAction클래스에 정의된 상수를 사용할 수 있습니다. 예를 들어, MapAction.ACTION_ZOOM_CHANGE는 확대/축소 수준이 변경되었음을 나타냅니다.

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

이 정보가 도움이 되었습니까? 의견을 보내 주십시오.