onLocationChanged вызывает метод onDraw в моем пользовательском представлении

У меня есть класс MapImageViewer Activity, в котором есть методы для проверки местоположения GPS телефонов. Затем это действие вызывает мое собственное представление под названием MapCanvas, где конструктор берет широту и долготу, а затем рисует круг в соответствующих пикселях на изображении карты.

Это работает нормально, но мне интересно, как я могу обновлять и вызывать метод onDraw каждый раз, когда меняются координаты GPS? Я знаю, что это нужно использовать в методе onLocationChanged.. но я не уверен, как я могу передать оттуда новые значения широты и долготы в свой класс Custom View.


person Mr X    schedule 11.07.2011    source источник


Ответы (2)


Как насчет отправки широты/долготы из метода onLocationChanged() с помощью .sendBroadcast() и обработки их внутри класса View с помощью BroadcastReceiver?

В качестве альтернативы вы можете использовать метод обратного вызова из LocationListener, как показано в the-users-current-location-in">этот пост.

person iDroid    schedule 11.07.2011
comment
Разве sendBroadcast() и ReceiveBroadcast() не используются при создании намерений? В моем случае я настраиваю свое представление содержимого на свое пользовательское представление... и в классе пользовательского представления мне нужно передать новые значения long/lat... и вызывать onDraw при каждом изменении.. - person Mr X; 11.07.2011

Вызывайте метод представления invalidate() каждый раз, когда вы получаете новые координаты (или postInvalidate(), если locationListener находится в другом потоке из потока пользовательского интерфейса)

person DeeV    schedule 11.07.2011
comment
Я не понимаю, как вызов метода недействительных (или postInvalidate) представлений что-то сделает. - person Mr X; 11.07.2011
comment
Он говорит операционной системе перерисовать представление, вызывая метод представления onDraw(), а также любые другие подготовительные операции, которые должна выполнить операционная система. недействительным является то, как вы принудительно рисуете вид. - person DeeV; 11.07.2011
comment
Я попытался поместить это в свой метод onLocationChanged, но это не сработало. mapCanvas = new MapCanvas(MapImageViewer.this, myMapImagePath, широта, долгота); установитьContentView(mapCanvas); mapCanvas.invalidate(); - person Mr X; 11.07.2011
comment
поцарапать это ... я имею в виду ... Я попытался поместить это в свой метод onLocationChanged, и это не сработало ... mapCanvas.setLat (широта); // новое значение широты mapCanvas.setLon(longitude); // новое значение долготы mapCanvas.invalidate(); //перерисовать вид - person Mr X; 11.07.2011
comment
недействительным является то, как вы вызываете onDraw() для представления. Предполагая, что MapCanvas расширяет MapView, кажется, что это сработает. Однако я добавил только оверлеи в MapViews. Я никогда ничего не рисовал напрямую. Я бы отправил сообщение LogCat в методе onDraw(), чтобы убедиться, что он вызывается. Если это так, убедитесь, что карта рисуется правильно. - person DeeV; 11.07.2011
comment
MapCanvas расширяет вид, потому что это мой пользовательский вид. Внутри этого класса находится конструктор (context, imagePath, lat, lon) и метод onDraw(). Я использую пользовательское изображение карты, а не карты Google. - person Mr X; 11.07.2011
comment
это работает сейчас. Должно быть, это были какие-то хитрые показания GPS, когда я впервые попробовал это. - person Mr X; 11.07.2011