动态改变 transformCenter
Change the transformCenter dynamically
我在这里使用 Android SDK Premium 3.9。我的 objective 是这样的:
- 首先在屏幕上的某个
PointF
处显示用户的当前位置
- 基于某些条件,我想在屏幕上添加一个"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);
}
- 确保使用有效的
PointF
调用 Map.setTransformCenter(PointF)
。 X 和 Y 应在 [x from 0 to map.getWidth(), y from 0 to map.getHeight()]
范围内。
- 方法
Map.setTransformCenter
只是一个setter,你需要像Map.setCenter()
或Map.zoomTo()
那样调用另一个方法。看看它是如何工作的。
在你使用 hereMap.setCenter(marker.getCoordinate(), Map.Animation.NONE);
的第二部分的伪代码中,确保你实际导航到新的地理坐标,而不是旧的。但实际上它应该导航到新的地图中心,即使你重新导航到旧的地理坐标。
我制作了小 gist 来展示如何使用 Map.setTransformCenter(PointF)
。
我在这里使用 Android SDK Premium 3.9。我的 objective 是这样的:
- 首先在屏幕上的某个
PointF
处显示用户的当前位置 - 基于某些条件,我想在屏幕上添加一个"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);
}
- 确保使用有效的
PointF
调用Map.setTransformCenter(PointF)
。 X 和 Y 应在[x from 0 to map.getWidth(), y from 0 to map.getHeight()]
范围内。 - 方法
Map.setTransformCenter
只是一个setter,你需要像Map.setCenter()
或Map.zoomTo()
那样调用另一个方法。看看它是如何工作的。
在你使用 hereMap.setCenter(marker.getCoordinate(), Map.Animation.NONE);
的第二部分的伪代码中,确保你实际导航到新的地理坐标,而不是旧的。但实际上它应该导航到新的地图中心,即使你重新导航到旧的地理坐标。
我制作了小 gist 来展示如何使用 Map.setTransformCenter(PointF)
。