我最近询问过如何将动画应用到标记弹出窗口(infowindow),并解释了为什么不可能:
注意:绘制的信息窗口不是实时视图。视图在返回时呈现为图像(使用
View.draw(Canvas)
)。这意味着对视图的任何后续更改都不会被地图上的信息窗口反映出来。要稍后更新信息窗口(例如,在加载图像后),请致电showInfoWindow()
。此外,信息窗口将不会考虑正常视图(例如触摸或手势事件)的任何典型交互。但是,您可以在整个信息窗口中收听通用点击事件,如以下部分所述。
研究了一些,我发现了一个使用V1的项目,它在标记的位置上手动创建了View。为此,另一个人做了这样的事情:
public void showPopup(View view, GeoPoint point, boolean centerPopup) {
removeAllViews();
MapView.LayoutParams lp = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,
point,
Utils.dipsToPixels(0.0f, mContext),
Utils.dipsToPixels(-12.0f, mContext),
MapView.LayoutParams.BOTTOM_CENTER);
if (centerPopup) {
getController().animateTo(point);
mIgnoreNextChangeEvent = true;
}
View balloon = mInflater.inflate(R.layout.balloon, null);
balloon.setLayoutParams(lp);
((ViewGroup) balloon.findViewById(R.id.balloonBody)).addView(view);
balloon.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.bounce_in));
addView(balloon);
}
因此,他手动创建气球视图并将其附加到MapView。
我一直试图用V2来模仿同样的东西,但是我还没有能力,我甚至都不知道这是否可行。例如,我使用“GoogleMap”而不是“MapView”,我不确定这是否与V1和V2之间的某些差异有关。
我将添加目前为止的参考资料。我试图从其他项目中复制代码并尝试修改它以便它可以在这个中工作,但我甚至无法编译它。
public boolean onMarkerClick(Marker marker) {
map.removeAllViews();
MapView.LayoutParams lp = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,
marker.getPosition(),
Tools.dipsToPixels(0.0f, this),
Tools.dipsToPixels(-12.0f, this),
MapView.LayoutParams.BOTTOM_CENTER);
if (centerPopup) {
getController().animateTo(point);
mIgnoreNextChangeEvent = true;
}
View balloon = mInflater.inflate(R.layout.balloon, null);
balloon.setLayoutParams(lp);
((ViewGroup) balloon.findViewById(R.id.balloonBody)).addView(view);
balloon.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.bounce_in));
addView(balloon);
return false;
}
答案 0 :(得分:2)
您无法将滚动地图与可能在其上的任何视图同步,即使您已完成此类解决方案,也会看起来很滞后。
您是否尝试过此解决方法:https://stackoverflow.com/a/16147630/2183804?