#android #skmaps
#Android #skmaps
Вопрос:
У меня есть SKMapSurfaceView
, на который я установил прослушиватель (через setMapSurfaceListener
, передавая SKMapSurfaceListener
объект). Когда я нажимаю на аннотацию, которая была добавлена в SKMapSurfaceView
via addAnnotation
, слушатель получает onSingleTap
событие, но нет onAnnotationSelected
. Я вижу в журналах Skobbler, что он обнаруживает нажатие на «пользовательский POI», который, как я полагаю, является моей аннотацией (особенно, поскольку идентификатор этого пользовательского POI в их журнале является уникальным идентификатором, который я указал в своей аннотации). Но ни onAnnotationSelected
один, ни onCustomPOISelected
один не вызывается в моем слушателе. Почему?
Редактировать: вот мой код:
SKAnnotation annotation = new SKAnnotation();
annotation.setUniqueID(123456);
annotation.setLocation(new SKCoordinate(
13.45457,
52.51592));
annotation.setMininumZoomLevel(15);
annotation.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_MARKER);
mapView.addAnnotation(annotation);
mapView.setMapSurfaceListener(new SKMapSurfaceListener() {
@Override
public void onSurfaceCreated() {
}
@Override
public void onSingleTap(SKScreenPoint arg0) {
Log.d("onSingleTap");
}
@Override
public void onScreenOrientationChanged() {
}
@Override
public void onRotateMap() {
}
@Override
public void onPOIClusterSelected(SKPOICluster arg0) {
Log.d("onPOIClusterSelected");
}
@Override
public void onMapRegionChanged(SKCoordinate arg0) {
}
@Override
public void onMapPOISelected(SKMapPOI arg0) {
Log.d("onMapPOISelected");
}
@Override
public void onMapActionUp(SKScreenPoint arg0) {
}
@Override
public void onMapActionDown(SKScreenPoint arg0) {
}
@Override
public void onLongPress(SKScreenPoint arg0) {
}
@Override
public void onInternetConnectionNeeded() {
}
@Override
public void onInternationalisationCalled(int arg0) {
}
@Override
public void onDoubleTap(SKScreenPoint arg0) {
Log.d("onDoubleTap");
float zoom = mapView.getZoomLevel() 1;
if (zoom <= SKMapSurfaceView.MINIMUM_ZOOM_LEVEL) {
mapView.setZoomSmooth(zoom, 250);
}
}
@Override
public void onCustomPOISelected(SKMapCustomPOI arg0) {
Log.d("onCustomPOISelected");
}
@Override
public void onCompassSelected() {
}
@Override
public void onAnnotationSelected(SKAnnotation annotation) {
Log.d("onAnnotationSelected");
}
@Override
public void onAnimationsFinished() {
}
@Override
public void onActionZoom() {
Log.d("onActionZoom");
}
@Override
public void onActionPan() {
Log.d("onActionPan");
}
});
И затем журналы, которые я получаю, если я делаю одно нажатие где-то НЕ в аннотации, а затем одно нажатие НА аннотацию:
06-22 19:34:27.674: D/SKMaps(20852): MapRenderer----onSurfaceCreated
06-22 19:34:27.679: D/SKMaps(20852): MapRenderer---- LinInitialized = true
06-22 19:34:28.394: D/SKMaps(20852): MapRenderer----Map follower mode 0
06-22 19:34:28.394: D/SKMaps(20852): MapRenderer----onSurfaceChanged width = 1080 height= 1701
...
06-22 19:35:11.729: D/SKMaps(20852): SKMapSurfaceView----SINGLE TAP CONFIRMED 0
06-22 19:35:11.729: D/SKMaps(20852): SKMapSurfaceView----Check north indicator 4 526.0 705.0 296 64 0 64
06-22 19:35:11.729: D/SKMaps(20852): SKMapSurfaceView----notifyWithMapInfo
06-22 19:35:11.759: D/Wanderant(20852): onSingleTap
06-22 19:35:17.399: D/SKMaps(20852): SKMapSurfaceView----SINGLE TAP CONFIRMED 0
06-22 19:35:17.399: D/SKMaps(20852): SKMapSurfaceView----Check north indicator 4 532.0 720.0 296 64 0 64
06-22 19:35:17.399: D/SKMaps(20852): SKMapSurfaceView----notifyWithMapInfo
06-22 19:35:17.429: D/SKMaps(20852): SKMapSurfaceView---- Tapped custom POI id=123456
06-22 19:35:17.429: D/Wanderant(20852): onSingleTap
Как вы можете видеть, в обоих случаях я получаю обратный вызов onSingleTap.
(Я пропустил код инициализации Skobbler maps, но это сделано в соответствии с руководством, и он успешно инициализируется и показывает карту и т. Д.)
Комментарии:
1. Привет, Тодор. Мне понадобится больше информации, чтобы отладить эту проблему. Можете ли вы включить код для одной из аннотаций, к которой вы пытаетесь подключиться, и журнал, который вы получаете в консоли (с указанием места обнаружения касания)?
2. Отредактировал мой исходный пост, чтобы включить код. Спасибо.
Ответ №1:
Проблема, с которой вы столкнулись, была ошибкой, присутствующей в SDK от 19 мая.
Мы протестировали это поведение в следующем обновлении SDK (ETA 30 июня 2014 г.) и теперь onAnnotationSelected
каждый раз вызывается корректно. Поэтому, пожалуйста, обновите свой SDK, как только будет доступна новая версия (вы должны получить электронное письмо / новостную рассылку, когда обновление будет доступно)
Комментарии:
1. Привет, я обновил SDK до последней версии, загруженной сегодня (версия 2.1.0), и проблема все еще существует, с точно такими же сообщениями в журнале, за единственным исключением, что после «ПОДТВЕРЖДЕНИЯ ОДНИМ НАЖАТИЕМ» теперь вместо «0» указано «null». Но мой onAnnotationSelected не вызывается. Я все еще получаю вызов только onSingleTap. Есть идеи?
2. Хммм … пожалуйста, свяжитесь dev@skobbler.com поскольку требуется больше исследований и кода.
3. Оказывается, я не очищал старые аннотации, и это были те, которые не работали. С новым SDK (2.1.0) нажатие на аннотации работает, если они являются добавленными в данный момент аннотациями и не остались с предыдущего экрана. Теперь я использую deleteAllAnnotationsAndCustomPOIs(), чтобы очистить все старые перед отображением экрана моей карты. Спасибо за вашу помощь.