在Google Maps v2上按地球数量移动地图标记

时间:2013-10-30 21:57:04

标签: android canvas google-maps-api-2

我已将可绘制形状的自定义地图标记添加到我的Google地图中。这些标记是各种颜色的点。当用户点击其中一个标记时,折线从源位置被绘制到所选标记;见图1 ;

]

图1:我当前的地图

直线绘制到由彩色圆点标记的坐标。然而,正如紫色点清晰可见,标记在顶部绘制 - 我更确切地说,折线与圆的中心相交,使得每个角度的线看起来更像这样;

/] http://milspace.viecorefsd.com/~nlehman/example.png

图2:所需的折线 - 圆交点

为了达到这个目的,我尝试将支持可绘制的画布翻译为点半径。这是我的尝试;

    // Circular marker.
    final int px = getResources().getDimensionPixelSize(dimen.map_dot_marker_size);
    final Bitmap mDotMarkerBitmap = Bitmap.createBitmap(px, px, Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(mDotMarkerBitmap);
    final Drawable shape = getResources().getDrawable(drawable.purple_map_dot);
    shape.setBounds(0, 0, px, px);
    canvas.translate(0, px/2);
    shape.draw(canvas);
    final MarkerOptions options = new MarkerOptions();
    options.position(spot.getNearestCityLatLng());
    options.icon(BitmapDescriptorFactory.fromBitmap(mDotMarkerBitmap));
    options.title(spot.getNearestCity());
    lastLocationSelectionMarker.addMarker(options);

这段代码确实移动了drawable,但背景画布的大小保持不变,这意味着圆圈被切成两半而另一半不可见。

社区能否建议如何最好地实现图2 之后的效果,并将标记中心直接放在它标记的坐标上?

1 个答案:

答案 0 :(得分:4)

创建anchor时必须使用Marker属性。默认情况下,锚点设置为0.5f,1f指向标记的中心水平和底部垂直部分。对于您的标记类型,我认为您需要使用[0.5f,0.5f]锚点(请参阅documentation

所以你的代码看起来像是:

// Circular marker.
final MarkerOptions options = new MarkerOptions();
options.position(spot.getNearestCityLatLng());
options.icon(BitmapDescriptorFactory.fromResource(R.drawable.purple_map_dot));
options.title(spot.getNearestCity());
options.anchor(0.5f, 0.5f);
lastLocationSelectionMarker.addMarker(options);