大厂面试问题,Android 天气APP(8),Android面试知识点总结宝典助你通关

在这里插入图片描述

然后就可以来显示地图了,以我的性格,那肯定是新建一个页面来做这个的。在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上的图标基本都是在这个上面找的,真心不错。

iconfont

这个地图的图标也是在上面找的。可以看到右边已经有一个更多功能的按钮了,我在左边加一个地图的。图标作为按钮,右边的图标我也做了一些修改,看上面的图进行改动,触摸时会有一个半透明的背景,这个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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

写在最后

本次我的分享也接近尾声了,感谢你们在百忙中花上一下午来这里聆听我的宣讲,希望在接下来的日子,我们共同成长,一起进步!!!

最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:

对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

Android架构师之路很漫长,一起共勉吧!

如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

[外链图片转存中…(img-X0s8Fsdz-1712488482663)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值