首先,我在这里继承了很多代码,虽然我已经梳理了几次,但是我仍然难以理解这种行为。我很难过。
我希望最后一次点击OverlayItem
在其余部分之上,即使它看起来很傻。我所看到的是,虽然MapView
是动画(以OverlayItem
为中心),但它完全符合我的要求,然后当它完成时,“选定的一个”再次跳转到背景。
这是默认行为吗?或者我的代码中有什么东西可以解决这个问题吗?
动画制作时:
完成居中动画后:
我可以看到一些解决这个问题的方法(在OverlayItem
方法中自己绘制选定的draw()
或确保选中的是最后一个),但人们在这种情况下做了什么?或者这只是我需要撤消的代码深处的某个错误?
答案 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}}。