2011-11-17 133 views
1

我有一個自定義視圖,我稱之爲「節點」,它是自定義視圖組的子節點,名爲「NodeGrid」。 「NodeGrid」類更具體地擴展了RelativeLayout。Android:在自定義視圖組中使用自定義視圖的onTouchEvent

我已經在我的自定義視圖類下面的代碼片段(「節點」):

private boolean isBeingDragged = false; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if (event.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     isBeingDragged = true; 
    } 
    else if (event.getAction() == MotionEvent.ACTION_UP) 
    { 
     isBeingDragged = false; 
    } 
    else if (event.getAction() == MotionEvent.ACTION_MOVE) 
    { 
     if (isBeingDragged) 
     { 
      float xPosition = event.getX(); 
      float yPosition = event.getY(); 

      //change the x and y position here 
     } 
    } 

    return false; 
} 

的問題:在這個代碼將其具有斷點

後,好像的onTouchEvent是僅針對MotionEvent.ACTION_DOWN情況調用,但不適用於其他兩種情況(「動作上升」或「動作移動」)。有誰知道任何可能導致這種情況發生的手?

也(可能與):

不要緊如何視圖被添加到一個ViewGroup?我注意到,除了「addView」之外,還有其他方法可以將子項添加到ViewGroup,例如「addFocusables」和「addTouchables」。現在,我只是使用「addView」將子視圖添加到ViewGroup。

回答

7

SDK Documentation

onTouch() - 這將返回一個布爾值,表明你的聽衆是否消耗了本次活動。重要的是,這個事件可以有多個相互關聯的動作。因此,如果您在收到向下操作事件時返回false,則表示您沒有使用該事件,並且對此事件的後續操作也不感興趣。因此,您不會被要求在事件中執行任何其他操作,例如手指手勢或最終上行動作事件。

當觸發ACTION_DOWN事件時,您需要返回true以表示您對與該同一事件相關的後續調用感興趣。

HTH

+0

鏈接「SDK文檔」不在該頁面上包含onTouch()方法的詳細信息(鏈接可能已更改)。但答案是正確的。 – vedant1811

+0

引用的文本仍然存在於鏈接的頁面上。接近事件監聽器部分的末尾。 – Devunwired

+0

哦,是的,這是真的。我的錯 – vedant1811