动画信息窗口在谷歌地图v2



我最近询问了如何将动画应用于标记弹出窗口(infowindow),并解释了为什么这是不可能的:

注意:所绘制的信息窗口不是实时视图。视图在返回时呈现为图像(使用View.draw(Canvas))。这意味着对视图的任何后续更改都不会在地图上的信息窗口中反映出来。要稍后更新信息窗口(例如,在加载图像之后),调用showInfoWindow()。此外,信息窗口将不尊重任何典型的普通视图的交互性,如触摸或手势事件。然而,你可以在整个信息窗口中监听一个通用的点击事件,如下节所述。

研究更多,我发现一个项目使用V1手动创建的标记的位置上的视图。为了做到这一点,另一个人做了这样的事情:

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;
}

你不能将滚动地图与任何可能在它上面的视图同步,即使你完成了这种解决方案,它也会看起来滞后。

你试过这个方法吗:https://stackoverflow.com/a/16147630/2183804 ?

最新更新