然后就可以来显示地图了,以我的性格,那肯定是新建一个页面来做这个的。在ui包下新建一个MapWeatherActivity,然后修改布局activity_map_weather.xml 代码如下:
<?xml version="1.0" encoding="utf-8"?><FrameLayout 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=“.ui.MapWeatherActivity”>
<com.baidu.mapapi.map.MapView
android:clickable=“true”
android:id=“@+id/map_view”
android:fitsSystemWindows=“true”
android:layout_width=“match_parent”
android:layout_height=“match_parent”/>
地图有了,然后就是做沉浸式效果,打开MapWeatherActivity,修改代码如下:
package com.llw.goodweather.ui;
import android.os.Bundle;
import com.baidu.mapapi.map.MapView;
import com.llw.goodweather.R;
import com.llw.goodweather.utils.StatusBarUtil;
import com.llw.mvplibrary.base.BaseActivity;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
- 地图天气
*/
public class MapWeatherActivity extends BaseActivity {
@BindView(R.id.map_view)
MapView mapView;//地图控件
@Override
public void initData(Bundle savedInstanceState) {
StatusBarUtil.transparencyBar(context);//透明状态栏
StatusBarUtil.StatusBarLightMode(context);//状态栏黑色字体
}
@Override
public int getLayoutId() {
return R.layout.activity_map_weather;
}
}
可以看到这里继承了BaseActiivty,实现里面的两个构造方法,然后通过注解的方式绑定地图控件,在页面初始化initData()的时候修改状态栏的背景和字体颜色。在getLayoutId()中指定布局。
那么这里就先告一段落了,因为我是新建的页面,所以我需要到主页面MainActivity中找一个地方去进入这个地图页面MapWeatherActivity。就选择左上角了。
修改activity_main.xml中的布局
icon_map.png,尺寸是48*48,白色的所以你看不见,不过依然可以保存
推荐一个图标网站,我APP上的图标基本都是在这个上面找的,真心不错。
这个地图的图标也是在上面找的。可以看到右边已经有一个更多功能的按钮了,我在左边加一个地图的。图标作为按钮,右边的图标我也做了一些修改,看上面的图进行改动,触摸时会有一个半透明的背景,这个drawable代码如下:
<?xml version="1.0" encoding="utf-8"?>然后进入到MainActivity中
点击跳转
OK,运行看一下效果吧。说实话这个GIF大小上限5M真的很坑爹,最坑爹是我的GIF命名4.83M,结果还是告诉我超过限制,没有办法只能降低GIF的清晰度了。
可以看到不是很清晰,但是我也没办法呀。地图确实已经看到了,但是为什么是在北京呢?因为这是默认的初始位置,所以需要自己去定位到当前位置。
首先在MapWeatherActivity中增加一个定位的监听方法,实现BDLocationListener,代码如下:
private LocationClient mLocationClient;//定位
private BaiduMap mBaiduMap;//百度地图
/**
- 定位SDK监听,
*/
private class MyLocationListener implements BDLocationListener {
/**
-
监听返回数据 MapView 销毁后不在处理新接收的位置
-
@param bdLocation 定位信息
*/
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if (bdLocation == null || mapView == null) {//做null处理,避免APP崩溃
return;
}
MyLocationData locationData = new MyLocationData.Builder()//定位构造器
.accuracy(bdLocation.getRadius())//设置定位数据的精度信息,单位:米
.direction(bdLocation.getDirection())//设置定位数据的方向信息
.latitude(bdLocation.getLatitude())//设置定位数据的纬度
.longitude(bdLocation.getLongitude())//设置定位数据的经度
.build();//构建生成定位数据对象
mBaiduMap.setMyLocationData(locationData);//设置定位数据,只有开启定位图层之后才会生效
//创建一个经纬度构造对象,传入定位返回的经纬度,Latitude是纬度,Longitude是经度,一对经纬度值代表地球上一个地点。
LatLng latLng = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder()//创建地图状态构造器
.target(latLng)//设置地图中心点,传入经纬度对象
.zoom(13.0f);//设置地图缩放级别 13 表示 比例尺/2000米 2公里
//改变地图状态,使用地图状态更新工厂中的新地图状态方法,传入状态构造器
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}
注释都是代码里,应该够清楚了吧,官方接入文档都没有我这个清楚。
然后再写一个初始化定位的方法。
/**
- 初始化定位
*/
private void initLocation() {
mBaiduMap.setMyLocationEnabled(true);//开启定位图层
mLocationClient = new LocationClient(context);//定位初始化
MyLocationListener listener = new MyLocationListener();//创建定位监听器
mLocationClient.registerLocationListener(listener);//注册定位监听,否则监听无效
LocationClientOption option = new LocationClientOption();//创建定位设置
option.setOpenGps(true);//打开GPS
option.setCoorType(“bd09ll”);//设置坐标类型 可以设置BD09LL和GCJ02两种坐标
option.setScanSpan(0);//设置扫描间隔,单位是毫秒,0 则表示只定位一次,设置毫秒不能低于1000,也就是1秒
mLocationClient.setLocOption(option);//传入定位设置
mLocationClient.start();//开始定位
}
在这个方法中,对定位做了监听和设置,然后启动定位。
最后只要在initData方法中调用就可以了。
最后就是关于Activity的生命周期要对地图做相应的处理。代码如下:
@Override
protected void onResume() {
super.onResume();
mapView.onResume();//生命周期管理
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();//生命周期管理
}
@Override
protected void onDestroy() {
super.onDestroy();
mLocationClient.stop();// 退出时销毁定位
mBaiduMap.setMyLocationEnabled(false);// 关闭定位图层
mapView.onDestroy();// 在activity执行onDestroy时必须调用mMapView.onDestroy()
}
然后就可以运行了,运行看看吧。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
写在最后
本次我的分享也接近尾声了,感谢你们在百忙中花上一下午来这里聆听我的宣讲,希望在接下来的日子,我们共同成长,一起进步!!!
最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:
对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
Android架构师之路很漫长,一起共勉吧!
如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
[外链图片转存中…(img-X0s8Fsdz-1712488482663)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算