width: 100%;
overflow: hidden;
position: absolute;
top: 100rpx;
bottom: 100rpx;
left: 0;
right: 0;
}
.map {
width: 100%;
height: 100%;
}
.map_text {
width: 95%;
height:auto;
position: absolute;
left: 0;
bottom: 0;
background: #fff;
padding: 2.5%;
overflow: hidden;
}
.map_text .navigation {
position: absolute;
right: 20rpx;
top: 35rpx;
}
.map_text .name {
line-height: 60rpx;
font-size: 30rpx;
padding-left: 10rpx;
}
.map_text .desc {
width: 100%;
display: flex;
line-height: 35rpx;
}
.map_text .desc .address {
width: calc(100% - 120rpx);
width: -webkit-calc(100% - 120rpx);
width: -moz-calc(100% - 120rpx);
font-size: 25rpx;
color: #666;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.odd_row {
color: #666;
padding: 10rpx 30rpx;
height: 70rpx;
line-height: 70rpx;
background: rgba(236, 255, 255, 0.8);
cursor: pointer;
}
.even_row {
color: #666;
padding: 10rpx 30rpx;
height: 70rpx;
line-height: 70rpx;
background: rgba(241, 255, 222, 0.8);
cursor: pointer;
}
index.js
//引入高德SDK
var amapFile = require(‘…/…/libs/amap-wx.js’);
var key = “高德地图的key”;
var markersData = [];
Page({
/**
- 页面的初始数据
*/
data: {
markers: [],
latitude: ‘’,
longitude: ‘’,
textData: {},
city: ‘’,
keywords: ‘加油站’,
mapshow:true,
maptextshow: false,
tipshow:false,
tips: {},
isIos: false,
currentLocation:{},
range:‘’,
},
makertap: function (e) {
var id = e.markerId;
var that = this;
that.showMarkerInfo(markersData, id);
that.changeMarkerColor(markersData, id);
},
/**
- 生命周期函数–监听页面加载
*/
onLoad: function (e) {
var that = this;
//判断是不是ios系统
wx.getSystemInfo({
success: function (res) {
if (res.platform == “ios”) {
that.setData({
isIos:true
});
}
}
});
//获取当前位置
that.getMyLocation();
wx.getSetting({
success: (res) => {
// res.authSetting[‘scope.userLocation’] == undefined 表示 初始化进入该页面
// res.authSetting[‘scope.userLocation’] == false 表示 非初始化进入该页面,且未授权
// res.authSetting[‘scope.userLocation’] == true 表示 地理位置授权
if (res.authSetting[‘scope.userLocation’] != undefined && res.authSetting[‘scope.userLocation’] != true) {
wx.showModal({
title: ‘是否授权当前位置’,
content: ‘需要获取您的地理位置,请确认授权,否则无法获取您所需数据’,
success: function (res) {
if (res.cancel) {
wx.showToast({
title: ‘授权失败’,
image: ‘/images/fail.png’,
duration: 1000
})
that.setData({
textData: {
name: ‘Error:用户取消授权’,
address: ‘无法加载地图,请在设置中允许请求位置信息’
}
});
} else if (res.confirm) {
wx.openSetting({
success: function (dataAu) {
if (dataAu.authSetting[“scope.userLocation”] == true) {
wx.showToast({
title: ‘授权成功’,
icon: ‘success’,
duration: 1000
})
//再次授权后,加载地图
that.showMap(that.data.keywords);
} else {
wx.showToast({
title: ‘授权失败’,
image: ‘/images/fail.png’,
duration: 1000
});
that.setData({
textData: {
name: ‘Error:授权失败’,
address: ‘无法加载地图,请在设置中允许请求位置信息’
}
});
}
}
})
}
}
})
} else {
//授权后默认加载
that.showMap(that.data.keywords);
}
}
});
},
showMap: function (keywords){
var that = this;
var myAmapFun = new amapFile.AMapWX({ key: key });
var params = {
iconPathSelected: ‘…/…/images/marker_checked.png’,
iconPath: ‘…/…/images/marker.png’,
success: function (data) {
markersData = data.markers;
var poisData = data.poisData;
var markers_new = [];
markersData.forEach(function (item, index) {
markers_new.push({
id: item.id,
latitude: item.latitude,
longitude: item.longitude,
iconPath: item.iconPath,
width: item.width,
height: item.height
})
})
if (markersData.length > 0) {
that.setData({
markers: markers_new
});
that.setData({
city: poisData[0].cityname || ‘’
});
that.setData({
latitude: markersData[0].latitude
});
that.setData({
longitude: markersData[0].longitude
});
that.showMarkerInfo(markersData, 0);
} else {
that.setData({
textData: {
name: ‘抱歉,未找到结果’,
address: ‘Error:no results found’
},
range : ‘’
});
}
},
fail: function (info) {
/*
//如果想使用定位来计算距离的话,苹果手机就得要求用户打开定位服务
if (that.data.isIos){
wx.showModal({
title: ‘提示’,
content: ‘定位失败,请前往设置打开定位权限(设置 → 隐私 → 定位服务)’ ,
success: function (res) {
if (res.confirm) {
//用户可能已重新开启定位,因此在这里尝试重新加载地图
that.showMap(that.data.keywords);
} else if (res.cancel) {
//用户点击取消,返回上一菜单
wx.navigateBack({ changed: true });
}
}
});
}
*/
}
}
params.querykeywords = keywords;
myAmapFun.getPoiAround(params)
},
onInputFocus: function (e) {
this.setData({
mapshow: false,
tipshow: true
});
},
onInputChange: function (e) {
var that = this;
var keywords = e.detail;
if (keywords==“”){
that.setData({
mapshow: true,
tipshow: false
});
}
var dataset = e.target.dataset;
var myAmapFun = new amapFile.AMapWX({ key: key });
myAmapFun.getInputtips({
keywords: keywords,
location: dataset.longitude + ‘,’ + dataset.latitude,
city: dataset.city,
success: function (data) {
if (data && data.tips) {
that.setData({
tips: data.tips
});
}
}
})
},
bindSearch: function (e) {
var keywords = e.target.dataset.keywords;
this.setData({
mapshow: true,
tipshow: false
});
this.showMap(keywords);
},
showMarkerInfo: function (data, i) {
var that = this;
console.log(that.data.currentLocation);
//计算距离
var lat1 = that.data.currentLocation.latitude;
var lng1 = that.data.currentLocation.longitude;
var lat2 = data[i].latitude;
var lng2 = data[i].longitude;
var distance = that.getDistance(lat1, lng1, lat2, lng2);
distance = parseInt(distance * 1000);
if (distance != null && distance>0){
var range = distance + “米”;
if (distance >= 1000) {
range = (Math.round(distance / 100) / 10).toFixed(1) + “公里”;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
[外链图片转存中…(img-yy3cbfXy-1712410849703)]
【算法合集】
[外链图片转存中…(img-s0bic1UV-1712410849703)]
【延伸Android必备知识点】
[外链图片转存中…(img-pkDoj4jj-1712410849703)]
【Android部分高级架构视频学习资源】
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!