一、如图。

二、设计详情:地图为腾讯MapView、搜索列表RecycleView 为屏幕长度的一半、点击地图空白处关闭列表、点击地图地点名称、搜索并展示;
三、注意点:腾讯地图显示和定位是分开的、上面的效果实现、必须接入地图和定位两个sdk;
// 腾讯定位
implementation 'com.tencent.map.geolocation:TencentLocationSdk-openplatform:7.3.0'
// 腾讯地图
implementation 'com.tencent.map:tencent-map-vector-sdk:4.3.4'
注意腾讯地图分为2D、3D; 如上为3D效果
四、业务或逻辑关键点 (整体代码在第五点)
地图展示:SupportMapFragment (腾讯提供)、内部封装了MapView、优点:开发者不需要关心地图生命周期;
xml中:
<fragment
android:id="@+id/map_frag"
class="com.tencent.tencentmap.mapsdk.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
地址搜索关键代码:
companion object {
private const val MSG_SUGGESTION = 10000
}
//地址模糊搜索、
private fun searchAddress(address: String?) {
if (address.isNullOrEmpty()) return
val tencentSearch = TencentSearch(this)
val suggestionParam = SuggestionParam(address, "上海")
//suggestion也提供了filter()方法和region方法
//具体说明见文档,或者官网的webservice对应接口
tencentSearch.suggestion(suggestionParam, object : HttpResponseListener<BaseObject> {
override fun onSuccess(arg0: Int, arg1: BaseObject?) {
if (arg1 == null) {
return
}
progressBar.postDelayed({
progressBar.visibility = View.GONE
val msg = Message()
msg.what = MSG_SUGGESTION
//关键点arg1
msg.obj = arg1
handler.sendMessage(msg)
}, 350)
}
override fun onFailure(arg0: Int, arg1: String?, arg2: Throwable?) {
progressBar.visibility = View.GONE
}
})
}
//地址搜索结果预览
private val handler = object : Handler() {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
if (msg.what == MSG_SUGGESTION) {
val searchList = (msg.obj as SuggestionResultObject).data
//RecycViewAdapter
mapAdapter.addData(searchList)
}
}
}
搜索结果实体类(腾讯)
public class SuggestionResultObject extends BaseObject {
public int count;
//此处data 为搜索列表结果数据
public List<SuggestionResultObject.SuggestionData> data;
//sub_pois 暂无用
public List<SuggestionResultObject.SubPoi> sub_pois;
public SuggestionResultObject() {
}
public static final class SubPoi extends JsonComposer {
public String parent_id;
public String id;
public String title;
public String address;
@Json(
name = "location"
)
public LatLng latLng;
public String adcode;
public String city;
public SubPoi() {
}
}
public static final class SuggestionData extends JsonComposer {
public String id;
public String title;
public String address;
public String province;
public String city;
/** @deprecated */
public String district;
//区号
public String adcode;
public int type;
@Json(
name = "location"
)
//经纬度
public LatLng latLng;
public float _distance;
public SuggestionData() {
}
}
}
地图默认marker点 定位Icon(红色箭头):
/**
* 设置定位图标样式
*/
private fun setLocMarkerStyle() {
val locationStyle = MyLocationStyle()
//创建图标
val bitmapDescriptor =
BitmapDescriptorFactory.fromResource(R.drawable.ic_map_location)
locationStyle?.icon(bitmapDescriptor)
//设置定位圆形区域的边框宽度
locationStyle?.strokeWidth(3)
//设置圆区域的颜色
locationStyle?.fillColor(R.color.style)
//连续定位,但不会移动到地图中心点,并且会跟随设备移动
// locationStyle = //locationStyle?.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER)
supportMapFragment = fragmentManger.findFragmentById(R.id.map_frag) as SupportMapFragment
val tencentMap = supportMapFragment?.map
tencentMap?.setMyLocationStyle(locationStyle)
}
点击地址Marker Icon显示:
//地图位置点击回调 、 tencentMap?.setOnMapPoiClickListener(this)
override fun onClicked(mapPoi: MapPoi?) {
setMarker(mapPoi?.getPosition(), mapPoi?.getName())
}
// latLng 经纬度、name 地址名称
private fun setMarker(latLng: LatLng?, name: String?) {
marker?.remove()
val options = MarkerOptions().position(latLng)
//设置infowindow
options.title("地址:")

本文详细介绍如何集成腾讯地图SDK,包括地图展示、地址搜索、点击交互等功能,并提供完整的代码示例。
最低0.47元/天 解锁文章
4481

被折叠的 条评论
为什么被折叠?



