【问题标题】:Move a map marker by a set number of pixels on Google Maps v2在 Google Maps v2 上将地图标记移动一定数量的像素
【发布时间】:2013-10-31 07:03:12
【问题描述】:

我已将可绘制形状的自定义地图标记添加到我的 Google 地图中。这些标记是各种颜色的点。当用户点击其中一个标记时,一条折线会从源位置绘制到所选标记;见图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);

这段代码确实移动了可绘制对象,但支持画布的大小保持不变,这意味着圆圈被切成两半,另一半不可见。

社区能否建议如何最好地实现我在图 2 中所追求的效果,标记中心直接位于它所标记的坐标上方?

【问题讨论】:

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


    【解决方案1】:

    创建Marker 时必须使用anchor 属性。默认情况下,锚点设置为 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);
    

    【讨论】:

    • 啊!感谢您提供默认锚信息。我曾尝试使用锚点,老实说,Javadoc 让我彻底困惑!它运作良好。 +1。
    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多