Две основные проблемы с вашим кодом.
ID_ICON
и ID_ICONN
должны иметь фактические значения и быть уникальными. Значит, они не могут быть одинаковыми. Если они одинаковы, Mapbox Maps SDK для Android не будет знать, какой значок на самом деле использовать. Я сделал
private static final String RED_MARKER_ICON_ID = "RED_MARKER_ICON_ID";
private static final String COMPASS_ICON_ID = "COMPASS_ICON_ID";
Даже если вы запустите
setLatLng(latitude,longitude)
, вам нужно запустить
symbolManager.update(symbolStart);
, если вы хотите обновить расположение аннотаций диспетчера подключаемых модулей аннотаций.
Следующий код ниже для https://imgur.com/a/7c3UzK0. Я поместил ваш код в пример демонстрационного приложения Mapbox, чтобы его было легче запустить и запустить, вместо того, чтобы создавать совершенно новый проект Android Studio.
public class MainActivity extends AppCompatActivity {
private MapView mapView;
private static final String RED_MARKER_ICON_ID = "RED_MARKER_ICON_ID";
private static final String COMPASS_ICON_ID = "COMPASS_ICON_ID";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mapbox.getInstance(this,
"access token");
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapMap);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
LatLng takestanLatLong = new LatLng(36.071636, 49.695322);
@Override
public void onMapReady(@NonNull final MapboxMap mapboxMap) {
mapboxMap.setStyle(new Style.Builder().fromUri(Style.MAPBOX_STREETS), new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
//get symbol image from drawable
style.addImage(RED_MARKER_ICON_ID, BitmapUtils.getBitmapFromDrawable(getResources().getDrawable(R.drawable.mapbox_marker_icon_default)));
style.addImage(COMPASS_ICON_ID, BitmapUtils.getBitmapFromDrawable(getResources().getDrawable(R.drawable.mapbox_compass_icon)));
//initialize symbol manager
final SymbolManager symbolManager = new SymbolManager(mapView, mapboxMap, style);
symbolManager.setIconAllowOverlap(true);
symbolManager.setIconIgnorePlacement(true);
//create symbol
final Symbol symbolStart = symbolManager.create(new SymbolOptions()
.withLatLng(takestanLatLong)
.withIconImage(RED_MARKER_ICON_ID)
.withSymbolSortKey(5.0f)
.withIconSize(1.5f));
mapboxMap.addOnCameraMoveListener(new MapboxMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
//get the camera position
LatLng latlng = mapboxMap.getCameraPosition().target;
//set the symbol icon for move
symbolStart.setIconImage(COMPASS_ICON_ID);
//set the camera new latlng for symbol
symbolStart.setLatLng(latlng);
symbolManager.update(symbolStart);
}
});
mapboxMap.addOnCameraIdleListener(new MapboxMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
//set the icon when move is finished
symbolStart.setIconImage(RED_MARKER_ICON_ID);
symbolManager.update(symbolStart);
}
});
CircleManager circleManager = new CircleManager(mapView, mapboxMap, style);
CircleOptions circleOptions = new CircleOptions()
.withLatLng(takestanLatLong)
.withCircleColor(ColorUtils.colorToRgbaString(Color.YELLOW))
.withCircleRadius(5f)
.withDraggable(true);
circleManager.create(circleOptions);
}
});
CameraPosition position = new CameraPosition.Builder()
.target(takestanLatLong)
.zoom(15)
.tilt(10)
.build();
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), 6000);
}
});
}
@Override
public void onStart() {
super.onStart();
mapView.onStart();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}