前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 高德地图API(详细步骤+源码)二

Android 高德地图API(详细步骤+源码)二

原创
作者头像
晨曦_LLW
修改2021-03-05 10:35:18
3.2K0
修改2021-03-05 10:35:18
举报

四、显示地图

下面改变一下activity_main.xml

代码语言:txt
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".MainActivity">

    <!--地图-->
    <com.amap.api.maps.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

我删除了TextView,改变了外部的父布局,进入到MainActivity中。按照下图进行改变,你可以将无用的代码删除掉。

然后增加地图生命周期的管理方法。

代码语言:txt
复制
	@Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mapView.onPause();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mapView.onSaveInstanceState(outState);
    }

下面重新运行一下,不出意外你就能看到地图了。

不出意外,你的页面会和我这个一毛一样,默认就是定位在北京。百度和腾讯也都是如此。

五、显示当前定位地图

很显然,默认的地图不能满足我们的要求,那么就需要开发者自行去设置了,比如我现在在深圳福田区,那么我就要定位到当前所在地这里才行,来看看要怎么做吧。

现在MainActivity中新增两个成员变量

代码语言:txt
复制
	//地图控制器
    private AMap aMap = null;
    //位置更改监听
    private OnLocationChangedListener mListener;

然后新增一个initMap()方法,用于初始化地图

代码语言:txt
复制
	/**
     * 初始化地图
     * @param savedInstanceState
     */
    private void initMap(Bundle savedInstanceState) {
        mapView = findViewById(R.id.map_view);
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mapView.onCreate(savedInstanceState);
        //初始化地图控制器对象
        aMap = mapView.getMap();

        // 设置定位监听
        aMap.setLocationSource(this);
        // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
        aMap.setMyLocationEnabled(true);
    }

同样要在onCreate中调用

同时,MainActivity要实现LocationSource

然后重写里面的两个方法在activate()和deactivate()。

代码如下:

代码语言:txt
复制
	/**
     * 激活定位
     */
    @Override
    public void activate(OnLocationChangedListener onLocationChangedListener) {
        mListener = onLocationChangedListener;
        if (mLocationClient == null) {
            mLocationClient.startLocation();//启动定位
        }
    }

    /**
     * 停止定位
     */
    @Override
    public void deactivate() {
        mListener = null;
        if (mLocationClient != null) {
            mLocationClient.stopLocation();
            mLocationClient.onDestroy();
        }
        mLocationClient = null;
    }

然后只要在定位结果的回调中,进行数据源的更改就可以实现地图的定位了。

下面运行一下吧。

可以看到已经到了福田区,只不过这个比例尺有点小,你可以点击右侧的 + 按钮放大一些,就能看得清楚些。

六、地图设置

① 修改自定义定位图标

修改定位图标,这里就需要一个样式配置。在MainActivity中新增

代码语言:txt
复制
	//定位样式
    private MyLocationStyle myLocationStyle = new MyLocationStyle();

然后在initMap()方法中配置。

代码语言:txt
复制
		// 自定义定位蓝点图标
        myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.gps_point));
        // 自定义精度范围的圆形边框颜色  都为0则透明
        myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));
        // 自定义精度范围的圆形边框宽度  0 无宽度
        myLocationStyle.strokeWidth(0);
        // 设置圆形的填充颜色  都为0则透明
        myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));
        
        //设置定位蓝点的Style
        aMap.setMyLocationStyle(myLocationStyle);

② 设置缩放等级

然后再修改缩放等级,

代码语言:txt
复制
		//设置最小缩放等级为16 ,缩放级别范围为[3, 20]
        aMap.setMinZoomLevel(12);

最终设置如下图所示:

下面运行一下:

OK,这就改好了。

③ 开启室内地图

代码语言:txt
复制
		aMap.setMinZoomLevel(20);
		//开启室内地图
        aMap.showIndoorMap(true);

运行

④ 地图控件设置

代码语言:txt
复制
	//定义一个UiSettings对象
    private UiSettings mUiSettings;

隐藏缩放按钮

代码语言:txt
复制
		//实例化UiSettings类对象
        mUiSettings = aMap.getUiSettings();
        //隐藏缩放按钮
        mUiSettings.setZoomControlsEnabled(false);

比例尺控件

代码语言:txt
复制
		//显示比例尺 默认不显示
        mUiSettings.setScaleControlsEnabled(true);

七、获取POI数据

POI (Point of Interest,兴趣点)。在地图表达中,一个 POI 可代表一栋大厦、一家商铺、一处景点等等。通过POI搜索,完成找餐馆、找景点、找厕所等等的功能。

首先先在app的build.gradle中添加依赖

代码语言:txt
复制
	//Material库
    implementation 'com.google.android.material:material:1.2.0'

然后修改activity_main.xml

代码语言:txt
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!--地图-->
    <com.amap.api.maps.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!--浮动按钮-->
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab_poi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_margin="20dp"
        android:clickable="true"
        android:onClick="queryPOI"
        android:src="@drawable/icon_favorite_red"
        android:visibility="gone"
        app:backgroundTint="#FFF"
        app:backgroundTintMode="screen"
        app:hoveredFocusedTranslationZ="18dp"
        app:pressedTranslationZ="18dp" />

</RelativeLayout>

浮动按钮中有一个图标

在res/drawable下新建一个icon_favorite_red.xml

代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:tint="#EF5350"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
    <path
        android:fillColor="@android:color/white"
        android:pathData="M13.35,20.13c-0.76,0.69 -1.93,0.69 -2.69,-0.01l-0.11,-0.1C5.3,15.27 1.87,12.16 2,8.28c0.06,-1.7 0.93,-3.33 2.34,-4.29 2.64,-1.8 5.9,-0.96 7.66,1.1 1.76,-2.06 5.02,-2.91 7.66,-1.1 1.41,0.96 2.28,2.59 2.34,4.29 0.14,3.88 -3.3,6.99 -8.55,11.76l-0.1,0.09z" />
</vector>

回到MainActivity

代码语言:txt
复制
	//POI查询对象
    private PoiSearch.Query query;
    //POI搜索对象
    private PoiSearch poiSearch;
    //城市码
    private String cityCode = null;
    //浮动按钮
    private FloatingActionButton fabPOI;

然后在onCreate中

代码语言:txt
复制
	fabPOI = findViewById(R.id.fab_poi);

然后在onLocationChanged进行赋值显示。

然后添加一个queryPOI()方法,这个方法对应了xml中浮动按钮的onClick的值。

代码语言:txt
复制
	/**
     * 浮动按钮点击查询附近POI
     *
     * @param view
     */
    public void queryPOI(View view) {
        //构造query对象
        query = new PoiSearch.Query("购物", "", cityCode);
        // 设置每页最多返回多少条poiitem
        query.setPageSize(10);
        //设置查询页码
        query.setPageNum(1);
        //构造 PoiSearch 对象
        poiSearch = new PoiSearch(this, query);
        //设置搜索回调监听
        poiSearch.setOnPoiSearchListener(this);
        //发起搜索附近POI异步请求
        poiSearch.searchPOIAsyn();
    }

在这个方法里面对query和poiSearch进行配置,然后发起搜索附近POI异步请求。

下面就要实现PoiSearch.OnPoiSearchListener

然后重写里面的onPoiSearched和onPoiItemSearched,方法如下:

代码语言:txt
复制
	/**
     * POI搜索返回
     *
     * @param poiResult POI所有数据
     * @param i
     */
    @Override
    public void onPoiSearched(PoiResult poiResult, int i) {
        //解析result获取POI信息

        //获取POI组数列表
        ArrayList<PoiItem> poiItems = poiResult.getPois();
        for (PoiItem poiItem : poiItems) {
            Log.d("MainActivity", " Title:" + poiItem.getTitle() + " Snippet:" + poiItem.getSnippet());
        }
    }

    /**
     * POI中的项目搜索返回
     *
     * @param poiItem 获取POI item
     * @param i
     */
    @Override
    public void onPoiItemSearched(PoiItem poiItem, int i) {

    }

下面运行之后点击一下这个右下角的浮动按钮。

数据就打印出来了。

下一篇

Android 高德地图API(详细步骤+源码)三

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 四、显示地图
  • 五、显示当前定位地图
  • 六、地图设置
    • ① 修改自定义定位图标
      • ② 设置缩放等级
        • ③ 开启室内地图
          • ④ 地图控件设置
          • 七、获取POI数据
          • 下一篇
            • Android 高德地图API(详细步骤+源码)三
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档