2011-04-19 58 views
3

我有一个扩展MapActivity的活动。但是当我点击地图时,onTouchEvent永远不会被调用。为什么是这样?onTouchEvent从未调用过MapActivity

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    Log.d("temp", "onTouchEvent"); 
    return true; 
} 

编辑:我现在有这两个方法在一个custum创建的ItemizedOverlay来捕捉我的事件。 当我点击一个覆盖图时,第一个被调用。但是当我触摸地图时,第二个(onTouchEvent)从不会被调用。

@Override 
    protected boolean onTap(int index) { 
     OverlayItem item = mOverlays.get(index); 
     this.movement = true; 
     Log.d("temp", "overlayItem tapped" + item.getTitle()); 
     return true; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event, MapView mapView) { 
     this.movement = false; 
     Log.d("temp", "overlayItem tapped finish"); 
     return true; 
    } 

回答

5

MapActivity相关的MapView几乎肯定会为你的看法。如果你看看Activity#onTouchEvent()的文档,它会说:“当触摸屏事件没有被它下面的任何视图处理时调用。”

http://developer.android.com/reference/android/app/Activity.html#onTouchEvent(android.view.MotionEvent)

我猜你想与触摸事件已经由MapView处理做什么,也许觉得把它的代码里正确的地方?

+0

“当触摸屏事件没有被其下的任何视图处理时调用”是的,这确实是问题,但我无法添加自定义监听器然后,我不得不改变MapActivity类,看起来像是必须有一个更简单的方法来实现这一点。 – Vincent 2011-04-19 15:25:46

+0

你想用触摸事件做什么? – 2011-04-19 15:26:50

+0

我在尝试改变逐项叠加的位置。首先,我在一个扩展了ItemizedOverlay的自定义类中捕获onTap事件(就像在google教程中一样)。然后我尝试在MapActivity类中获得新的touchEvent – Vincent 2011-04-19 15:28:36

0

没有被执行的处理程序。我还没有找到这种行为的确切原因。原因可能是MapActivity不会自动将事件转发到注册的MapView,或者它只是没有得到关于该事件的通知,因为该移动事件实际上是在MapView本身而不是它的父级MapActivity上发生的。

什么可以做,而不是是直接注册事件上的MapView mapView.setOnTouchListener(新OnTouchListener(){

public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    return false; 
    } 
}); 

..或覆盖MapActivity的dispatchTouchEvent(MotionEvent)有什么但是在这种情况下,要适当地转发事件

相关问题