#android #mapbox-android #mapbox-marker
Вопрос:
Я разрабатываю приложение для университетского проекта. В этом приложении у меня есть некоторые функции, используемые для создания маркеров на карте. Когда я загружаю эту карту большую часть времени, маркеры не видны, но если я увеличиваю или уменьшаю масштаб, они появляются немедленно. Это мой код для добавления маркера на карту со стилем и изображением:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Mapbox.getInstance(this, getString(R.string.mapbox_access_token)); setContentView(R.layout.activity_main); mapView = findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); mapView.getMapAsync(this); } @Override public void onMapReady(@NonNull final MapboxMap mapboxMap) { MainActivity.this.mapboxMap = mapboxMap; StringRequest request = new StringRequest(url, new Response.Listenerlt;Stringgt;() { @Override public void onResponse(String response) { try { JSONArray jsonArray = new JSONArray(response); Listlt;Featuregt; symbolLayerIconFeatureList = new ArrayListlt;gt;(); for(int i = 0; i lt; jsonArray.length(); i ){ JSONObject crag = jsonArray.getJSONObject(i); String nome = crag.getString("nome"); String tipo = crag.getString("tipo"); double lng = crag.getDouble("longitudine"); double lat = crag.getDouble("latitudine"); String descrizione = crag.getString("descrizione"); String immagine = crag.getString("immagine"); symbolLayerIconFeatureList.add(Feature.fromGeometry(Point.fromLngLat(lng,lat))); symbolLayerIconFeatureList.get(i).addStringProperty("NAME_PROPERTY_KEY", nome); symbolLayerIconFeatureList.get(i).addStringProperty("TYPE_KEY", tipo); symbolLayerIconFeatureList.get(i).addStringProperty("DESCRIPTION_KEY", descrizione); symbolLayerIconFeatureList.get(i).addStringProperty("IMAGE_KEY", immagine); } mapboxMap.setStyle(Style.OUTDOORS, new Style.OnStyleLoaded(){ @Override public void onStyleLoaded(@NonNull Style style) { giveStyle(style,symbolLayerIconFeatureList); enableLocationComponent(style); } }); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); mQueue = Volley.newRequestQueue(this); mQueue.add(request); mapView.addOnStyleImageMissingListener(new MapView.OnStyleImageMissingListener() { @Override public void onStyleImageMissing(@NonNull String id) { if (id.equals("Falesia") amp;amp; showCrags) { addImage(id, R.drawable.map_marker_falesia); } if (id.equals("Palestra") amp;amp; showGyms) { addImage(id, R.drawable.map_marker_gym); } } }); } public void giveStyle(Style style, Listlt;Featuregt; symbolLayerIconFeatureList){ style.addSource(new GeoJsonSource(SOURCE_ID, FeatureCollection.fromFeatures(symbolLayerIconFeatureList))); style.addLayer(new SymbolLayer(LAYER_ID,SOURCE_ID) .withProperties( iconImage(get("TYPE_KEY")), iconSize((float) 0.3), iconAllowOverlap(false), iconIgnorePlacement(false) )); mapboxMap.addOnMapClickListener(MainActivity.this); mapboxMap.getUiSettings().setLogoEnabled(true); mapboxMap.getUiSettings().setAttributionEnabled(false); } private void addImage(String paramString, int paramInt) { Style style = this.mapboxMap.getStyle(); if (style != null) style.addImageAsync(paramString, BitmapUtils.getBitmapFromDrawable(getDrawable(paramInt))); }
Могу ли я что-нибудь сделать, чтобы это исправить?