2011-04-19 31 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)有什麼但是在這種情況下,要適當地轉發事件

相關問題