Android Google Map API обнаруживает изменение положения - PullRequest
1 голос
/ 14 июля 2011

У меня есть наложение, которое я хочу наложить на основе диапазона от центра карты.

Я хочу обнаружить изменение в текущем центре карты, чтобы, если человек постоянно перемещает карту,панорамируя в другую область, я могу удалить и заполнить данные в новой области.

Есть ли для этого прослушиватель или мне нужно будет создать поток для периодической проверки центра карты?

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Я думаю, что-то подобное может сработать

Когда вы впервые загружаете карту, получите проекцию и сохраните центр GeoPoint в середине вида, на котором отображается карта, используя класс Projection MapView

mapPosition = myMapView.getProjection().fromPixels(x,y) 

Вернет GeoPoint, связанный с x, y, в этом случае xy должен быть центром MapView

Расширить класс MapView

public myMapView extends Mapview { }

Так что вы можетеoverride onDispatchDraw

В этом методе вы можете проверить, изменился ли уровень масштабирования, если нет, то, вероятно, это связано с панорамированием карты. Возможно, это и другие причины, зависящие от того, что вы делаете, но это разумнодумать, что большинство перерисовок - панорамирование, если исключить масштабирование

Сравните текущую проекцию GeoPoint в центре экрана с той, которую вы сохранили при запуске.Если он соответствует вашим дистанционным критериям, выполните вашу логику и обновите геопункт mapPosition.

Если я правильно понимаю ваш вопрос, что-то подобное должно сработать.Конечно, вы могли бы перегнать других членов расширенного класса, если вы не хотите проверять каждую перерисовку, также можно использовать события движения, но вы сказали, что у вас есть проблемы с ними.

ОБНОВЛЕНИЕ:

Возможно, вы сможете сделать это непосредственно в MapView по сравнению с пользовательским контейнером, но в прошлом я переопределил dispatchTouchEvent для расширенного контейнера.класс, внутри которого живет вид карты, в данном случае Framelayout, так что

public class myFrameLayout extends FrameLayout {

Затем внутри этого я использую что-то подобное для отслеживания состояния сенсорных движений, я уменьшу его до минимума, который должен работать«режимы» - это перечисления, которые я создал, когда вы выполняете логику, когда пользователь поднимает палец внизу оператора case

@Override
public boolean dispatchTouchEvent(MotionEvent event) {

  switch (event.getAction() & MotionEvent.ACTION_MASK) {

     case MotionEvent.ACTION_POINTER_UP: // Second Finger
     case MotionEvent.ACTION_DOWN:       // First finger  
        mode = GESTURE_MODE.PRE_DRAG;
     break;

     case MotionEvent.ACTION_MOVE:
      if (GESTURE_MODE.PRE_DRAG == mode) // Pan
          mode = GESTURE_MODE.DRAG;
      else                               
      {
      }
     break;

     case MotionEvent.ACTION_POINTER_DOWN:
        mode = GESTURE_MODE.MULTI_TOUCH;
     break;

     case MotionEvent.ACTION_UP: // All fingers removed 
        if (GESTURE_MODE.DRAG == mode) 
        { 
            // DO YOUR PANNING MOVED FAR LOGIC HERE 
        }  
        mode = GESTURE_MODE.NONE;
     break;

 }

 return super.dispatchTouchEvent(event);

} 
0 голосов
/ 14 июля 2011

Я забыл его название ..... вам придется читать документацию по API ..... но есть свойства / методы MapActivity, которые определяют границы (в терминах широта / долгота)текущая отображаемая карта, которую можно использовать для определения значения центра.Если GPS сообщает, что пользователь в настоящее время имеет значение XXX, но они панорамировали карту в направлении, которое отводит вычисленный центр YYYY от того места, где GPS сообщает, тогда вы можете определить, «насколько далеко от центра» находится Картасейчас позиционируется.Кстати, используйте метод Великого Круга, когда выполняете математику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...