如何更改Google地图中的道路颜色?

时间:2012-11-18 11:19:27

标签: android google-maps android-mapview android-canvas

我正在寻找一种方法来改变MapView for Android中的道路颜色(黄色)。我想过覆盖onDraw方法,然后遍历每个像素并更改它,但方法是最终的。

我还想过用ViewGroup包装MapView,然后尝试覆盖它的onDraw,但我不知道该怎么做。

有没有人有想法?

感谢。

2 个答案:

答案 0 :(得分:0)

我建议您考虑使用OpenStreetMap数据而不是Google MapView切换到osmdroid,并修改街道颜色渲染的源代码。

答案 1 :(得分:0)

现在(我不知道Google Maps API V3.0的确切时刻),Google Maps API的Styled Map功能非常简单。对于地图样式JSON准备,您可以使用Styling Withard。此外,您只能将必要的部件添加到JSON样式对象,而不是所有地图元素。例如,对于黄色道路(带有蓝色标签),JSON(/res/raw/map_style.json)可以是:

[
  {
    "featureType": "road",
    "elementType": "geometry.fill",
    "stylers": [
      {
        "color": "#ffff00"
      }
    ]
  },
  {
    "featureType": "road",
    "elementType": "labels.text.fill",
    "stylers": [
      {
        "color": "#0000ff"
      }
    ]
  }

带有地图片段的

MainActyvity.java

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    private GoogleMap mGoogleMap;
    private MapFragment mapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map_fragment);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;

        try {
            // Customise the styling of the base map using a JSON object defined
            // in a raw resource file.
            boolean success = mGoogleMap.setMapStyle(
                    MapStyleOptions.loadRawResourceStyle(
                            this, R.raw.map_style));

            if (!success) {
                Log.e(TAG, "Style parsing failed.");
            }
        } catch (Resources.NotFoundException e) {
            Log.e(TAG, "Can't find style. Error: ", e);
        }
        // Position the map's camera near Sydney, Australia.
        mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(50.4501,30.5234), 16.0f));

    }

}

activity_main.xls

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.test.just.googlemapsgeneral.activities.MainActivity">

    <fragment
        android:id="@+id/map_fragment"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

结果你应该得到:

Android styled map fragment

您还可以为静态地图添加样式参数: 对

https://maps.googleapis.com/maps/api/staticmap?&key=[your_MAPS_API_KEY]&center=50.4501,30.5234&zoom=16&size=640x640&style=feature:road|element:geometry|color:0xFFFF00

请求你:

Styled static map

有关详细信息,请参阅Official Blog