2016-11-07 3 views
0

Я начинаю использовать мастер стиля Google, и мне было интересно узнать, можно ли покрасить улицы (например: локальная улица) в разных цветах по определенной области. Я был бы очень благодарен, если бы вы могли сказать мне, как это сделать в Android 2.2.Мастер стиля Google

ответ

0

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

style_json.json

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

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

MapsActivity.java

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)); 
    } 
} 

Here вы можете найти свой стиль Справка.

Учтите, что согласно the documentation стилизация работает только на тип карты normal.

Также обратите внимание, что этот стиль применяется ко всей карте. Вы не можете, например, использовать местные дороги в красном для США и синие для Европы из коробки, но вы можете эмулировать это поведение, используя OnCameraIdleListener и моделируя карту с различными json файлами на основе CameraPosition (target, zoom, bearing, zoom). Например (укладка дорог местного значения с помощью R.raw.style_json если 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)); 
     } 
    } 
} 
Смежные вопросы