我试图在Google地图片段中添加标记 我甚至在旧的已弃用的函数中搜索到了所有地方,但似乎无论采用何种方法我都会在视图上调用canvas.draw()创建将其转换为位图" ;图片",但我想在包含textview的标记上显示一个气泡,来自用户的输入文本不显示某些文本
有没有可行的方法呢?
注意:我试图避免创建视图并将其放在实际布局中的片段上,因为我试图避免计算标记的位置,如果可能的话
我会提供一些代码,但我无法决定哪些代码在这里!
答案 0 :(得分:1)
不幸的是,使用当前版本的Maps v2 api的AFAIK除了通过监视标记位置之外没有其他方法可以做到这一点。
以下是如何执行此操作的示例代码。
我在自己的应用程序中使用了这个方法,它运行正常。
AbsoluteLayout.LayoutParams overlayLayoutParams;
ViewGroup infoWindowContainer; // your custom info window
private void showInfoWindow(Marker marker) {
/*
prepare & show your custom info window
*/
trackedPosition = marker.getPosition();
startPositionUpdater();
}
private void hideInfoWindow() {
/*
hide your custom info window
*/
stopPositionUpdater();
}
private void startPositionUpdater() {
if (trackedPosition != null && infoWindowContainer.getVisibility() == VISIBLE && map != null) {
positionUpdaterRunnable = new PositionUpdaterRunnable();
handler.post(positionUpdaterRunnable);
}
}
private void stopPositionUpdater() {
if(positionUpdaterRunnable != null) {
handler.removeCallbacks(positionUpdaterRunnable);
positionUpdaterRunnable = null;
}
}
private class PositionUpdaterRunnable implements Runnable {
private int lastXPosition = Integer.MIN_VALUE;
private int lastYPosition = Integer.MIN_VALUE;
@Override
public void run() {
if (trackedPosition != null && isInfoWindowShown() && map != null && handler != null) {
Projection projection = map.getProjection();
Point targetPosition = projection.toScreenLocation(trackedPosition);
if (lastXPosition != targetPosition.x || lastYPosition != targetPosition.y) {
overlayLayoutParams.x = targetPosition.x - popupXOffset;
overlayLayoutParams.y = targetPosition.y - popupYOffset;
infoWindowContainer.setLayoutParams(overlayLayoutParams);
lastXPosition = targetPosition.x;
lastYPosition = targetPosition.y;
}
handler.postDelayed(this, INFO_WINDOW_POSITION_REFRESH_INTERVAL);
}
}
}