2

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

注意:绘制的信息窗口不是实时视图。视图在返回时呈现为图像(使用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;
}
4

1 回答 1

2

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

您是否尝试过此解决方法:https ://stackoverflow.com/a/16147630/2183804 ?

于 2013-04-23T14:48:10.173 回答