像Uber这样的Android Google地图样式
时间:2020-02-23 14:28:57 来源:igfitidea点击:
今天,我们将了解如何在Android应用程序中实现Google地图样式。
说明
到目前为止,我们已经在许多教程中讨论和实现了Google Maps。
以下是它们的列表:
- Android Google Maps示例教程
- Android Google Maps API集成
- Android Google Maps当前位置,夜间模式功能
- Android Google Map –两点之间的绘图路线
- Android Google Map Street View示例
- Google静态地图Android
Android Studio提供了Google Maps的默认模板。
让我们使用它。
如之前的教程所述,您需要添加API密钥才能通过Google Cloud Console使用Google Maps。
要设置地图样式,我们只需对Google Map实例执行以下操作。
mMap.setMapStyle(MapStyleOptions.loadRawResourceStyle( this, "jsonPathGoesHere");
项目结构
Android Google Maps Style Project
原始文件夹JSON文件中提供了地图样式。
您可以自定义它们或者从Web浏览各种地图样式。
代码
下面给出了activity_maps.xml的代码:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="https://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment xmlns:tools="https://schemas.android.com/tools" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MapsActivity" <Button android:id="@+id/btnChangeStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:text="CHANGE MAP STYLE" </FrameLayout>
SupportMapFragment用于在我们的活动布局中展示地图。
下面给出了MapsActivity.java类的代码:
package com.theitroad.androidgooglemapsstyling; import android.content.res.Resources; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MapStyleOptions; import com.google.android.gms.maps.model.MarkerOptions; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; private Button button; int[] rawArray = {R.raw.assasin_creed, R.raw.uber_style, R.raw.game_style, R.raw.vintage_style}; int currentIndex = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); button = findViewById(R.id.btnChangeStyle); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setMapStyle(); } }); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; //Add a marker in Sydney and move the camera LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); setMapStyle(); } private void setMapStyle() { if (currentIndex == rawArray.length && rawArray.length != 0) { currentIndex = 0; } try { mMap.setMapStyle( MapStyleOptions.loadRawResourceStyle( this, rawArray[currentIndex++])); } catch (Resources.NotFoundException e) { Log.e("MapsActivity", "Cannot find style.", e); } } }
地图准备好后,就会触发onMapReady。
其中,我们设置了一个虚拟位置标记。
setMapStyle用于切换存储在数组中的各种地图样式。