0

我开始使用谷歌风格向导,我想知道是否可以根据确定的区域为街道(例如:当地街道)涂上不同的颜色。如果您能告诉我如何在 android studio 2.2 中执行此操作,我将不胜感激。

4

1 回答 1

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

在这里您可以找到样式参考。

考虑到根据文档样式仅适用于normal地图类型。

另请注意,此样式适用于整个地图。例如,您不能为美国设置红色的本地道路,为欧洲设置蓝色的本地道路,但您可以使用基于( , , , ) 的OnCameraIdleListener不同文件设置地图样式并模拟此行为。例如(使用if和 using else 设置地方道路的样式):jsonCameraPositiontargetzoombearingzoomR.raw.style_jsonlatitude > 40.4R.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));
        }
    }
}
于 2016-11-07T16:10:11.137 回答