API by 高德 传送门
Android客户端地图应用,主要涵盖定位/搜索/地图/路线功能,实现了大部分api提供的功能。
首次进入时请允许获取设备信息权限。点击定位图标并允许获取位置信息权限,再点击定位图标定位到当前位置。权限仅用于定位,之后不再需要权限。
1.定位功能:
显示定位蓝点,蓝点对准当前设备朝向;显示定位精度圆;动态更新当前位置
点击地图右上角的定位按钮进行定位
2.在地图上展示地图上的关键点(POI)点,可进行点击,使用BottomSheet控件展示地点的简略信息;
上拉菜单即可获得有关地点的详细信息
3.切换地图类型:
地图类型有默认/卫星地图/导航地图/夜间地图 可选,默认地图模式显示路况
4.搜索功能:
点击搜索框左边搜索符号搜索,自动弹出搜索暗示,搜索结果以上拉菜单形式呈现
5.路线功能:
在详细信息页面点击路线按钮查看路线,可以在TabLayout上切换路线,
其中在起点/终点/关键点可以点击查看出行提示
6.其他隐藏功能:
夜间模式支持;异常处理;部分组件Material Design
动态权限获取:
//系统弹框请求权限 ActivityCompat.requestPermissions(this,new String[]{permission} requestCode);
定位蓝点旋转功能:
蓝点旋转效果即将朝上的方形的蓝点图片整体旋转一定的角度。
//从传感器获取手机的旋转角度 x = x + getScreenRotationOnPhone(context); //通过计算后设置给大头针(蓝点Marker)一定的旋转角度 marker.setRotateAngle(360 - angle);
使用SharedPreference存储选中的地图类型,在应用重启后仍然能够加载退出时选中的地图类型;使用ViewModel暂存对象和数据,在Configuation改变时能保留部分设置
BottomSheet控件:两个BottomSheet控件分别用于查看POI和搜索POI显示RecyclerView
布局文件根视图为LinearLayout。只需添加以下声明即可变为BottomSheet布局:
app:layout_behavior="@string/bottom_sheet_behavior"
其中查看POI的BottomSheet通过
newState
参数判断BottomSheet的状态并执行特定的操作@Override public void onStateChanged(@NonNull View bottomSheet, int newState) { if (newState == BottomSheetBehavior.STATE_EXPANDED && !pullUpFlag) { //设置参数并开始搜索 PoiSearchHelper poiSearchHelper = new PoiSearchHelper(context, null, rootLayout); poiSearchHelper.searchPOIIdAsyn(poi.getPoiId()); } else if (pullUpFlag) { //flag恢复默认状态 pullUpFlag = false; } }
当然还有诸如搜索及结果处理,RecyclerView等等基本内容
关键点展示: 致敬母校(逃
切换地图:
定位功能及蓝点的指向:
搜索功能:
查看路线:
数据持久化:
需要提前想好:实现什么功能/怎么实现/界面及界面导航方式/数据和界面的通信方式。比如说MVVM是几乎要做完才了解到的,如果一开始设计就想好要加入,则可以省去很多繁琐的参数传递。只有这些心里都有数,编程时候才能少改动,效率才最高。
多学习参考文档和Github上各路大神的作品。我当快要完成时才学懂Handler的用法,浪费了很多精力,作品中也没有加入。要先去学习用法,等学习的差不多了再来做。
1.Model和ViewModel的深入使用,采用MVVM架构
2.使用Handler取代直接传递某些参数
3.使用Kotlin
4.导航功能/任意点到任意点的路线(虽然不难做了)
5.减少硬编码和各种Warnings,提升健壮性