“隐藏”Android中的OverlayItem,可能吗?

问题描述:

我正在研究MapView应用程序,并希望在程序中放置一个漂亮的小复活节彩蛋。我想要做的是有一个基本上不可见的叠加层,但是当点击会触发一个事件来显示一个视图。“隐藏”Android中的OverlayItem,可能吗?

现在在iPhone上,我通过在注解中使用setHidden:true来实现这一点,我不想看到它..注释仍然存在,仍然是可点击的,但是你看不到它。

我想在Android的overlayItem上找到一些等价的方法,但什么都没发现。我唯一的选择就是通过这种方式来查找/创建透明图像并将其添加为mapView的叠加层?如果必须的话,我可以做到这一点,但还有其他选择吗?如果没有,任何人都可以指向一个相对较小的透明图像?

我发现最简单的解决方案是只使用一个不可见的drawable并将其添加为overlayitem,所以这就是我所做的,它的工作原理预期。

您可以在地图视图的顶部制作可点击的图像视图(相应地设置宽度/高度,颜色为透明),点击时会触发复活节彩蛋。然而,它可能很难正确定位..

除此之外,我可以想象使用自定义视图,您可以重写onTouch函数来触发复活节彩蛋,如果x,y坐标位于一个框内。否则会被地图视图处理。但这听起来像可能是一个复活节彩蛋很多工作..

+0

我刚刚添加了一个基本上是透明图像的覆盖图作为itemizedoverlayitem,并且它工作正常。感谢您的其他想法。 – user756212 2011-05-31 14:24:23

我知道你找到了一种方法来隐藏你的覆盖,但有更优雅的方式来做到这一点。 创建自定义类的叠加:

public class MapOverlay extends Overlay{ 

    private Boolean visible; 

    public MapOverlay(){ 
     this.visible = true; 
    } 

    public void draw(Canvas canvas, MapView mapv, boolean shadow){ 
     super.draw(canvas, mapv, shadow); 

     if (visible) { 
      // draw what you want 
     } 
    } 

    public Boolean isVisible() { 
     return visible; 
    } 

    public void isVisible(Boolean visible) { 
     this.visible = visible; 
    } 

    public void toggleVisible() { 
     this.visible = !visible; 
    } 
} 

然后在你的活动,增加覆盖和往常一样:

mapView.getOverlays().addOverlay(new MapOverlay()); 

以后,如果你想显示/隐藏叠加,只需拨打:

mapView.getOverlays().get(0).toggleVisible(); 

或:

mapView.getOverlays().get(0).isVisible(false); 

希望它有帮助。

+0

你的意思是“MapOverlay扩展OverlayItem”吗? – 2012-10-12 20:48:31