动态改变 transformCenter

Change the transformCenter dynamically

我在这里使用 Android SDK Premium 3.9。我的 objective 是这样的:

  1. 首先在屏幕上的某个 PointF 处显示用户的当前位置
  2. 基于某些条件,我想在屏幕上添加一个"destination marker"。目的地标记位于与当前位置不同的位置。此标记不得位于中心 - 而是必须偏移某个 PointF

我没能做到这一点。我可以对初始 "current location" 使用一次 setTransformCenter 并生效。但是,如果我再次调用它,它似乎并没有生效。我在第 2 步中添加的标记从来没有在正确的位置。

这是一些伪代码:

hereMap.setTransformCenter(positionIndicatorPoint);

GeoCoordinate markerCoordinate = getMarkerCoordinates();
MapMarker marker = new MapMarker();
marker.setCoordinate(markerCoordinate);


hereMap.setTransformCenter(mapMarkerPoint);
hereMap.addMapObject(marker);
hereMap.setCenter(marker.getCoordinate(), Map.Animation.NONE);

我做错了什么?

编辑:

当显示标记时,当前位置指示器不必是"on-screen"。

您可以参考我们的 github 存储库以获取有关 MapMarker - https://github.com/heremaps/here-android-sdk-examples/blob/master/map-objects/app/src/main/java/com/here/android/example/map/objects/MapFragmentView.java 的示例。以下是摘自 github 的代码片段。您也可以查看许多其他示例。希望这对您有所帮助!

 /**
     * Initialize Create MapMarker Button to add/remove MapMarker.
     */
    private void initCreateMapMarkerButton() {
        m_marker_button = (Button) m_activity.findViewById(R.id.marker_button);

        m_marker_button.setOnClickListener(new View.OnClickListener() {
            // if MapMarker already exist on map, then remove MapMarker, other create MapMarker.
            @Override
            public void onClick(View v) {
                if (m_map != null && m_map_marker != null) {
                    m_map.removeMapObject(m_map_marker);
                    m_map_marker = null;
                } else {
                    createMapMarker();
                }
            }
        });
    }

    /**
     * create a MapMarker and add the MapMarker to active map view.
     */
    private void createMapMarker() {
        // create an image from cafe.png.
        Image marker_img = new Image();
        try {
            marker_img.setImageResource(R.drawable.cafe);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // create a MapMarker centered at current location with png image.
        m_map_marker = new MapMarker(m_map.getCenter(), marker_img);
        // add a MapMarker to current active map.
        m_map.addMapObject(m_map_marker);
}
  1. 确保使用有效的 PointF 调用 Map.setTransformCenter(PointF)。 X 和 Y 应在 [x from 0 to map.getWidth(), y from 0 to map.getHeight()] 范围内。
  2. 方法Map.setTransformCenter只是一个setter,你需要像Map.setCenter()Map.zoomTo()那样调用另一个方法。看看它是如何工作的。

在你使用 hereMap.setCenter(marker.getCoordinate(), Map.Animation.NONE); 的第二部分的伪代码中,确保你实际导航到新的地理坐标,而不是旧的。但实际上它应该导航到新的地图中心,即使你重新导航到旧的地理坐标。

我制作了小 gist 来展示如何使用 Map.setTransformCenter(PointF)