1.设置多个marker,并给多个marker设置点击事件。(如果想设置单个的话,可以用marker.showinfowindow)
for (i in 0..2) { val latitude = 0.0 val longitude = 0.0 val latLng = LatLng(latitude, longitude) val view = LayoutInflater.from(context).inflate( R.layout.mapfrag_marker, null ) val tv = view?.findViewById<View>(R.id.tv_name) as TextView tv.text = "我是marker" val bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(convertViewToBitmap(view)) val markerOption = MarkerOptions() markerOption.position(latLng) markerOption.draggable(true)//设置Marker可拖动 markerOption.isFlat = true//设置marker平贴地图效果 markerOption.title(i.toString()) markerOption.snippet(i.toString()) markerOption.icon(bitmapDescriptor) aMap?.addMarker(markerOption) } //如果marker只是一个图片 Glide.with(this) .load(bean.getResult()?.profilePhoto.toString()) .asBitmap() .skipMemoryCache(true) .into(object : SimpleTarget<Bitmap>() { override fun onResourceReady(resource: Bitmap?, glideAnimation: GlideAnimation<in Bitmap>?) { //待图片加载完毕后再设置bitmapDes iv.setImageBitmap(resource) val bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(convertViewToBitmap(view)) val markerOption_ = MarkerOptions() markerOption_.position(latLng) // 将Marker设置为贴地显示,可以双指下拉地图查看效果 markerOption_.isFlat = true//设置marker平贴地图效果 markerOption.anchor(0f, 0f) markerOption_.icon(bitmapDescriptor) maker_ = aMap_.addMarker(markerOption_) } }) //将view转换为bitmap private fun convertViewToBitmap(view: View): Bitmap { view.measure( View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) ) view.layout(0, 0, view.measuredWidth, view.measuredHeight) view.buildDrawingCache() return view.drawingCache } //设置点击事件 val markerClickListener = AMap. // 返回 true 则表示接口已响应事件,否则返回false OnMarkerClickListener { Log.e("snippet", it.snippet) //可以根据snippet来区分是哪个marker true //点击 marker 是否移动到中心 } // 绑定 Marker 被点击事件 aMap?.setOnMarkerClickListener(markerClickListener)
2.设置定位中心点。
val latLng = LatLng(latitude, longitude) aMap?.moveCamera(CameraUpdateFactory.changeLatLng(latLng))//定位中心点
3.划轨迹。主要看大致地理位置。
// 绘制一条直线 aMap.addPolyline( PolylineOptions() // .add( // LatLng(40.086796, 116.397266), // LatLng(41.995827, 116.480393), // LatLng(39.996057, 116.480003), // LatLng(42.995921, 116.480096) // ) //集合数据 .addAll(listTrack) //线的宽度 .width(20f).setDottedLine(false).geodesic(true) //颜色 .color(Color.argb(255, 255, 0, 0)) )
4.搜索地点。
private fun searchPoint(key: String) { val query = PoiSearch.Query(key, "", "") //keyWord表示搜索字符串, //第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字) //cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索 query.pageSize = 100// 设置每页最多返回多少条poiitem query.pageNum = 1 //设置查询页码 val poiSearch = PoiSearch(this, query) poiSearch.setOnPoiSearchListener(object : PoiSearch.OnPoiSearchListener { override fun onPoiItemSearched(p0: PoiItem?, p1: Int) { } override fun onPoiSearched(p0: PoiResult?, p1: Int) { // 处理列表数据 } }) poiSearch.searchPOIAsyn() }
5.定位。
val locationStyle = MyLocationStyle() locationStyle.interval(2000)//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE)//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。 locationStyle.showMyLocation(true)//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。 locationStyle.radiusFillColor(resources.getColor(R.color.map_radius_color))