Мастер Стиля Google

Я начал использовать мастер стиля google, и мне было интересно узнать, можно ли окрашивать улицы (например: местная улица) в разные цвета по области. Я был бы очень благодарен, если бы вы могли рассказать мне, как это сделать в android studio 2.2.

1 ответ

  1. Вам нужно будет определить jsonфайл для стиля вашей карты, определяющий объекты, которые вы хотите стиль и стилеры (в примере я стиль местных дорог с красным цветом).

    style_json.формат JSON

    [
      {
        "featureType": "road.local",
        "elementType": "geometry",
        "stylers": [
          {
            "color": "#ff0000"
          }
        ]
      }
    ]
    

    Затем вам нужно будет применить стиль к карте:

    MapsActivity.Ява

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
    
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
        }
    
        @Override
        public void onMapReady(GoogleMap googleMap) {
            googleMap.setMapStyle(
                    MapStyleOptions.loadRawResourceStyle(
                            this, R.raw.style_json));
        }
    }
    

    Здесь вы можете найти ссылку на стиль.

    Учтите, что согласно документации укладка работает только по normalтипу карты.

    Также обратите внимание, что этот стиль применяется ко всей карте. Вы не можете, например, стилизовать местные дороги в красный цвет для США и в синий для Европы из коробки, но вы можете эмулировать это поведение, используя OnCameraIdleListenerи стиль карты с различными jsonфайлами на основе CameraPosition(target,zoom,bearing,zoom). Например (укладка местных дорог с использованием R.raw.style_jsonif latitude > 40.4и использование R.raw.style_json2в противном случае):

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnCameraIdleListener {
        private GoogleMap mMap;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
    
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
        }
    
        @Override
        public void onMapReady(GoogleMap googleMap) {
            this.mMap = googleMap;
            mMap.setOnCameraIdleListener(this);
    
            LatLng ll1 = new LatLng(40.4, -3.7);
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll1, 17));
        }
    
        @Override
        public void onCameraIdle() {
            if (mMap.getCameraPosition().target.latitude > 40.4) {
                mMap.setMapStyle(
                        MapStyleOptions.loadRawResourceStyle(
                                this, R.raw.style_json));
            } else {
                mMap.setMapStyle(
                        MapStyleOptions.loadRawResourceStyle(
                                this, R.raw.style_json2));
            }
        }
    }