2

我正在尝试在我的 Android 应用程序中使用自定义标记“气泡”。为此,我创建了一个返回并填充视图的 InfoWindowAdapter。

但是,由于某种原因,它似乎不允许我将动画应用于该视图(或内部的任何内容)。我希望它以某种动画方式弹出,但我可能遗漏了一些东西。

这是我迄今为止尝试过的:

map.setInfoWindowAdapter(new InfoWindowAdapter() {
    private final View contents = getLayoutInflater().inflate(R.layout.marker_layout, null);

    public View getInfoWindow(Marker marker) {
        TranslateAnimation animator = new TranslateAnimation(0.0f, 0.0f, 0.0f, 100.0f);

        animator.setDuration(2000);
        animator.setInterpolator(new AccelerateInterpolator());
        animator.setFillAfter(true);

        contents.findViewById(R.id.entity_name).clearAnimation();
        contents.findViewById(R.id.entity_name).startAnimation(animator);

        ((TextView) contents.findViewById(R.id.entity_name)).setText(marker.getTitle());
        return contents;
    }
/* ... */

视图成功创建并填充,但没有父动画。如果我将相同的动画应用于布局的另一个元素,它可以完美地工作,所以我开始认为这可能与谷歌地图使用信息窗口的方式有关?

4

2 回答 2

9

您不能将动画应用于InfoWindow,原因很简单。您在 中看到的InfoWindow不是您定义的布局,而是从中绘制的图像。这意味着你不能操纵这个InfoWindow

来自谷歌的文档:

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

于 2013-04-22T10:52:22.027 回答
3

Handler您可以尝试使用and来解决这个限制Marker.showInfoWindow()

在短时间内,每次在 getInfoWindow 中向处理程序发送消息,调用 showInfoWindow 并创建不同的视图(在您的情况下具有不同的下边距)。

这可能有点棘手。当用户在这 2 秒内关闭它时,您必须跟踪打开的信息窗口以不继续“动画”。

于 2013-04-22T12:55:26.883 回答