3

首先,我在这里继承了很多代码,尽管我已经梳理了几次寻找这种行为的原因,但我很困惑。

我希望最后一个被轻拍OverlayItem的东西在其余部分之上,即使它看起来很傻。我所看到的是,当它MapView正在制作动画(使 居中OverlayItem)时,它完全符合我的要求,然后当它完成时,“选定的”再次跳到背景。

这是默认行为吗?或者我的代码中有什么东西把这一切都搞砸了?

动画时:

在此处输入图像描述

居中动画完成后:

在此处输入图像描述

我可以看到一些解决此问题的方法(OverlayItem在方法中自己绘制所选draw()对象或确保所选对象是最后绘制的对象),但是在这种情况下人们会怎么做?或者这只是我需要撤消的代码深处的一个错误?

4

2 回答 2

1

我相信,当您将重点放在一个特定OverlayItem的地方时,它就会出现在前面。就像是:

    myItemizedOverlay.setFocus(overlayItem);

有了这个,你不需要一直玩项目订单。

--已编辑--

//Define this class level field
private Handler mHandler = new Handler();

//Use this after starting animation
mHandler.postDelayed(new Runnable() {

    @Override
    public void run() {
        myItemizedOverlay.setFocus(overlayItem);
        mapView.invalidate();  
    }
}, 500);

问候。

于 2012-12-15T04:11:24.487 回答
0

编辑:似乎 ItemizedOverlay.setFocus(item)是在顶部绘制单个项目的方法(在 a 之后mapview.invalidate())。我无法让它按照我想要的方式工作,因为当mapview动画移除焦点并且绘图顺序变回来时。

非常感谢Android Mapview:控制多种类型的 OverlayItems 的排序?用于向我指出绘图顺序行为。

目前,这是我的强硬解决方案。您可以通过覆盖in来完全控制OverlayItems 的显示顺序。 getIndexToDrawItemizedOverlay

protected int getIndexToDraw(final int drawingOrder)

drawingOrder参数与传入的参数具有相同的索引createItem。您返回绘制标记的顺序(稍后绘制更大的数字,这意味着“在顶部”)。

在我的特殊情况下,我有一个ArrayList要排序的项目,并确保所选项目OverlayItem始终位于列表的最后。然后我的getIndexToDraw方法是这样的:

@Override
protected int getIndexToDraw(final int drawingOrder)
{
    return drawingOrder;
}

为了以OverlayItems与我将它们存储在我的ArrayList.

于 2012-12-15T04:39:01.867 回答