지도의 동작 제어
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 메소드는 작업 발생 허용 여부를 정의합니다. perform과 allow 메소드를 사용하려면 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;
}
}
}