1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android 自定义地图标注 Android高德地图自定义Markers【原创】

android 自定义地图标注 Android高德地图自定义Markers【原创】

时间:2024-03-13 12:14:14

相关推荐

android 自定义地图标注 Android高德地图自定义Markers【原创】

之前的博客里说了地图的嵌入和定位,今天就说说在地图上显示一些我们想要的。在地图中有自带的Markers(标记),但是它只显示一个椭圆的图标,一般是不符合我们的需求的,这样就要我们自己来自定义。首先标记有下面一些属性;

1.position(Required) 在地图上标记位置的经纬度值。参数不能为空。

2.title 当用户点击标记,在信息窗口上显示的字符串。

3.snippet 附加文本,显示在标题下方。

4.draggable 如果您允许用户可以自由移动标记,设置为“ true ”。默认情况下为“ false ”。

5.visible 设置“ false ”,标记不可见。默认情况下为“ true ”。

6.anchor图标摆放在地图上的基准点。默认情况下,锚点是从图片下沿的中间处。

7.perspective设置 true,标记有近大远小效果。默认情况下为 false。

8.可以通过Marker.setRotateAngle() 方法设置标记的旋转角度,从正北开始,逆时针计算。如设置旋转90度,Marker.setRotateAngle(90)

9.通过setFlat() 方法设置标志是否贴地显示

自定义图标通常由 BitmapDescriptor 设置。我们可以在类 BitmapDescriptorFactory 使用以下其中一种方法定义。

1.fromAsset(String assetName) 在 assets 目录中使用图像创建自定义标记。

2.fromBitmap (Bitmap image) 使用位图图像创建自定义标记。

3.fromFile (String path) 指定路径的文件创建自定义图标。

4.fromResource (int resourceId) 使用已经存在的资源创建自定义图标。

先看一下要实现的效果:

地图自带标记实现效果

实现思路是:自定义布局,获取数据填入相应位置,然后将view转成Bitmap,调用AMap.addMarker(markerOptions) 方法添加到地图上。

1.自定义布局并填充数据:

for (int i = 0; i < positionEneityList.size(); i++) {

if (positionEneityList.get(i).getType().equals("1")) {

View view = View.inflate(getActivity(),R.layout.view_day, null);

TextView tv_price = (TextView) view.findViewById(R.id.tv_price);

TextView tv_price_status = (TextView) view.findViewById(R.id.tv_price_status);

tv_price.setText(positionEneityList.get(i).getPrice());

tv_price_status.setText("元/时");

Bitmap bitmap = CommentActivity.convertViewToBitmap(view);

drawMarkerOnMap(new LatLng(Double.parseDouble(positionEneityList.get(i).getLatitude())

, Double.parseDouble(positionEneityList.get(i).getLongitude())), bitmap, positionEneityList.get(i).getId());

}

}

2.转成Bitmap:

//view 转bitmap

public static Bitmap convertViewToBitmap(View view) {

view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

view.buildDrawingCache();

Bitmap bitmap = view.getDrawingCache();

return bitmap;

}

3.添加到地图上:

/**

* 在地图上画marker

*

* @param point marker坐标点位置(example:LatLng point = new LatLng(39.963175,

* 116.400244); )

* @param markerIcon 图标

* @return Marker对象

*/

private Marker drawMarkerOnMap(LatLng point, Bitmap markerIcon, String id) {

if (aMap != null && point != null) {

Marker marker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 1)

.position(point)

.title(id)

.icon(BitmapDescriptorFactory.fromBitmap(markerIcon)));

return marker;

}

return null;

}

这样就实现了上述效果。

转载时请注明出处及相应链接,本文永久地址:/13791.html

微信打赏

支付宝打赏

感谢您对作者Lena的打赏,我们会更加努力!如果您想成为作者,请点我

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。