Этот вопрос относится к CN1Lib для Google Map .
Моя проблема в том, что метод addMarker(com.codename1.ui.Component marker, com.codename1.maps.Coord location)
не работает должным образом на моем реальном устройстве Android 7, если я не использую вместе метод setCameraPosition(com.codename1.maps.Coord crd)
.
Чтобы быть более понятным, с помощью следующего кода я расширяю класс MapContainer
: проблема в том, что я не могу удалить строку this.setCameraPosition(coordinate);
без нарушения функциональности (если я удалю эту строку, то я не смогу добавить маркер в повернутая позиция).
Я не уверен, есть ли ошибка в моем коде или в CN1Lib.
public class MyMapContainer extends MapContainer {
private Label pin;
private Location markerLocation = new Location(0.0, 0.0);
MapObject mapObject = null;
/**
* Constructor that creates a default pinVector to be used with
* addMarker(Coord coordinate)
*/
public MyMapContainer() {
super();
Style s = new Style();
s.setFgColor(ColorUtil.BLACK);
pin = new Label(FontImage.createMaterial(FontImage.MATERIAL_PLACE, s, 10));
}
/**
* Constructor
*
* @param pinVector to be used with addMarker(Coord coordinate)
*/
public MyMapContainer(Image pinVector) {
this();
if (pinVector != null) {
pin = new Label(pinVector);
}
}
/**
* Adds a single marker (removes the previous one, if any)
*
* @param coordinate
*/
public void addMarker(Coord coordinate) {
if (mapObject != null) {
pin.remove();
this.removeMapObject(mapObject);
Log.p("Marker removed");
}
mapObject = this.addMarker(pin, coordinate);
this.setCameraPosition(coordinate);
Log.p("Marker added to the coordinate: " + coordinate.toString());
markerLocation.setLatitude(coordinate.getLatitude());
markerLocation.setLongitude(coordinate.getLongitude());
}
/**
* Returns the marker location
*
* @return markerLocation
*/
public Location getMarkerLocation() {
return markerLocation;
}
}
Чтобы проверить этот расширенный класс, я написал следующий код в основном классе:
mapContainer.addMarker(initialCoordinate);
mapContainer.zoom(initialCoordinate, 18);
mapContainer.addTapListener(e -> {
Coord userTappedCoord = mapContainer.getCoordAtPosition(e.getX(), e.getY());
Log.p("userTappedCoord: " + userTappedCoord);
mapContainer.addMarker(userTappedCoord);
});
--- ОБНОВЛЕНИЕ (как ответ на комментарий Шая)
Если заменить this.setCameraPosition
на следующие строки ...
this.revalidate();
if (Display.getInstance().getCurrent() != null) {
Display.getInstance().getCurrent().revalidate();
}
//this.setCameraPosition(coordinate);
... проблема та же: я не могу добавить новый маркер. Чтобы быть более понятным, пожалуйста, посмотрите это видео:
https://www.informatica -libera.net / VID_20180507_113028.mp4
На видео белый кружок соответствует точке, где я касаюсь экрана. Я нажимаю на нее три раза (вы можете услышать щелчки мыши в видео), но маркер перемещается в случайную позицию после каждого нажатия, а затем возвращается в первую позицию. Это видео зарегистрировано в ферме устройств, но у меня такая же проблема с моим реальным устройством.