如何控制分项叠加上的叠加项目的顺序?

时间:2012-12-14 21:44:06

标签: android android-mapview itemizedoverlay overlayitem

首先,我在这里继承了很多代码,虽然我已经梳理了几次,但是我仍然难以理解这种行为。我很难过。

我希望最后一次点击OverlayItem在其余部分之上,即使它看起来很傻。我所看到的是,虽然MapView是动画(以OverlayItem为中心),但它完全符合我的要求,然后当它完成时,“选定的一个”再次跳转到背景。

这是默认行为吗?或者我的代码中有什么东西可以解决这个问题吗?

动画制作时:

enter image description here

完成居中动画后:

enter image description here

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

2 个答案:

答案 0 :(得分: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);

问候。

答案 1 :(得分:0)

编辑:似乎ItemizedOverlay .setFocus(item)是在顶部(mapview.invalidate()之后)绘制单个项目的方法。我不能按照我想要的方式工作,因为当mapview动画时,它会移除焦点和绘制顺序。

非常感谢Android Mapview: Control ordering of multiple types of OverlayItems?将绘图顺序行为指向我。

目前,这是我严厉的解决方案。您可以通过覆盖OverlayItem中的getIndexToDraw来完全控制显示ItemizedOverlay的顺序。

protected int getIndexToDraw(final int drawingOrder)

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

在我的特定情况下,我有一个ArrayList个项目,我对其进行排序,并确保所选的OverlayItem始终位于列表的最后。然后我的getIndexToDraw方法如下所示:

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

为了按照我OverlayItems中存储的ArrayList的顺序绘制{{1}}。