2011-05-23 76 views
0

我在我的应用程序中有一个mapview,并且所有事情都与touchEvents令人惊叹地工作。Mapview onTap不会触发OverlayItem onTap

但是为了最大化应用程序的用户权限,我一直在尝试添加trackBall接口功能,并且遇到问题。

当地图查看周围焦点时,轨迹球可以正确地滚动地图,但是我无法获取onTap事件以在用户居中覆盖项目时触发。

当我点击鼠标按钮(我使用模拟器)来模拟轨迹球用户(F6占用轨迹球)的点击时,没有任何反应。onTrackBallEvent代码在这种情况下永远不会被触发,我期望API文档说在这种情况下onTap应该被解雇,但它也不会被解雇。

如果我不在overlayItem的中心,我会在onTrackBallEvent中获得ACTION_DOWN和ACTION_UP事件,只有当地图以OverlayItem为中心时,onTrackBallEvent才会被触发。不幸的是,onTap事件也不会被解雇。显然,当覆盖层位于屏幕的中心位置,并且用户点击轨迹球时,操作系统正在做这些点击操作,但是如果我能够弄清楚它是什么,我会感到厌烦。

有谁知道我应该找什么活动?

回答

0

它适用于此。我检查屏幕上的生命点是否与某些覆盖物品相匹配。

 public boolean onTouchEvent(MotionEvent event, MapView mv) { 
     final int action=event.getAction(); 
     final int x=(int)event.getX(); 
     final int y=(int)event.getY(); 

     if(!this.marker.equals(getResources().getDrawable(R.drawable.parada))){ 
      if (action == MotionEvent.ACTION_DOWN) { 
         for (OverlayItem item : mItems) { 
         Point p = new Point(0,0);      
         mv.getProjection().toPixels(item.getPoint(), p);       
         if (hitTest(item, marker, x-p.x, y-p.y) && item.getSnippet()!= "parada") { 
+0

我不是100%确定你在这里建议什么,这段代码看起来像它会确定在视图中点击哪个标记。然而,这个事件在哪里/何时被调用? – user756212 2011-05-23 16:22:47

+0

我在API的 – user756212 2011-05-23 16:23:07

+0

中没有看到这个签名。Nevermind,我发现它...这是覆盖层中的覆盖得到了你。但是我仍然困惑为什么onTap没有像API所说的那样被解雇。 – user756212 2011-05-23 16:25:37

0

请试试这个。这是用于在地图视图上显示多个叠加,可能会解决问题:https://github.com/donnfelker/android-mapviewballoons

+0

谢谢,建议,但这不是我的问题。 – user756212 2011-05-24 16:14:32

+0

覆盖显示正常,问题是,当在轨迹球模式下,并在覆盖层上,轨迹球点击事件似乎从未似乎触发..或者至少从未似乎达到我的代码..它认为跟踪球点击不是传递了视图链。 IE中的managedOverlay正在消耗它,当它在覆盖项目上时,并且我没有直接或简单的访问来扩展/覆盖此类。 – user756212 2011-05-24 16:16:41

1

这是一个相当古老的问题,但我想我会给我2美分。出于某种原因,您需要在地图上的某个地方添加叠加层,然后onTap()覆盖可以添加您单击的其他叠加层。我用:

public boolean onTap(GeoPoint p, MapView mapView) { 
    boolean tappedAnOverlay = super.onTap(p, mapView); 
    if (tappedAnOverlay) { 
     // do your thing if hit an overlay 
    } 
    else { 
     // no overlay found in that location 
    } 

    MapController mc = mapView.getController(); 
    mc.animateTo(p); 

    return true; 

} 
相关问题