📜  如何在 Android 的 Fragment 中实现谷歌地图?(1)

📅  最后修改于: 2023-12-03 14:52:13.377000             🧑  作者: Mango

如何在 Android 的 Fragment 中实现谷歌地图?

在 Android 应用中,集成谷歌地图是非常常见的需求之一。本文将介绍如何在 Fragment 中实现谷歌地图,并提供代码片段和详细说明。

  1. 添加依赖

首先,我们需要在项目的 build.gradle 文件中添加谷歌地图的依赖:

implementation 'com.google.android.gms:play-services-maps:18.0.0'

然后,在 AndroidManifest.xml 文件中添加地图权限和 API Key:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="YOUR_API_KEY" />

请替换 YOUR_API_KEY 为你的 Google Cloud Console 中创建的 API Key。

  1. 在布局文件中添加 MapView

我们可以在 Fragment 的布局文件中添加一个 MapView,用于显示地图。示例布局文件如下:

<RelativeLayout
    android:id="@+id/map_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.gms.maps.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

请注意,MapFragment 是 Android 中的支持库类型,它已经包含了 MapView,可以很方便地使用,在此我们使用 MapView 作为示例。

  1. 初始化 MapView

在 Fragment 的代码中,我们需要初始化 MapView,并在 Fragment 的生命周期中管理 MapView 的生命周期。示例代码如下:

public class MapFragment extends Fragment implements OnMapReadyCallback {

    private MapView mapView;
    private GoogleMap googleMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_map, container, false);
        mapView = (MapView) rootView.findViewById(R.id.map_view);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(this);
        return rootView;
    }

    @Override
    public void onMapReady(GoogleMap map) {
        googleMap = map;
        // 初始化地图设置
    }

    @Override
    public void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }
}

在上面的代码中,我们在 onCreateView 方法中获取 MapView,并在其中调用 mapView.onCreate(savedInstanceState) 和 mapView.getMapAsync(this) 方法来初始化 MapView。onMapReady 方法将在 MapView 初始化完成时被回调,我们可以在该方法中获取 GoogleMap 对象,并进行一些初始化设置。onResume、onPause、onDestroy 和 onLowMemory 方法是用于管理 MapView 生命周期的方法,需要在 Fragment 生命周期相应阶段调用。

  1. 设置地图

在 Fragment 中初始化 GoogleMap 后,我们需要通过 GoogleMap 对象进行一些地图设置。例如,设置地图类型:

googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

设置缩放级别:

googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(39.9042, 116.4074), 10));

添加标记:

googleMap.addMarker(new MarkerOptions().position(new LatLng(39.9042, 116.4074)).title("Beijing"));

更多关于 GoogleMap 的设置和操作,请参考官方文档:https://developers.google.com/maps/documentation/android-sdk/start

  1. 运行应用

最后,在 MainActivity 中将 MapFragment 添加到 Activity 中,并运行应用:

getSupportFragmentManager().beginTransaction().replace(R.id.container, new MapFragment()).commit();

运行效果如下图所示:

Google Map

到此为止,我们已经成功实现了在 Fragment 中集成谷歌地图,欢迎大家试试。