2011-11-17 5 views
1

"NodeGrid"라는 사용자 정의 ViewGroup의 하위 인 "노드"라고하는 사용자 정의보기가 있습니다. "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 경우에만 호출되지만 다른 두 경우 ("작업 실행"또는 "동작 이동") 중 하나에 대해서는 호출되지 않습니다. 이 일이 일어날 수있는 손에서 벗어난 것을 아는 사람이 있습니까?

또한 (관련이있을 수 있습니다) :

는 뷰는 뷰 그룹에 추가됩니다 방법 중요합니까? "addView"외에도 "addFocusables"및 "addTouchables"와 같은 ViewGroup에 자식을 추가하는 다른 방법이 있다는 것을 알았습니다. 지금은 단순히 "addView"를 사용하여 ViewGroup에 자식 뷰를 추가하는 것입니다. SDK Documentation에서

답변

7

:

onTouch은() - 이것은 당신의 리스너가이 이벤트를 소모 여부를 나타내는 부울을 반환합니다. 중요한 것은이 이벤트가 서로 따라 오는 여러 작업을 가질 수 있다는 것입니다. 따라서 다운 액션 이벤트가 수신 될 때 false를 반환하면 해당 이벤트를 소비하지 않았고이 이벤트의 후속 액션에도 관심이 없다는 것을 나타냅니다. 따라서 손가락 제스쳐 또는 최우선 액션 이벤트와 같은 이벤트 내의 다른 모든 작업은 호출되지 않습니다.

ACTION_DOWN 이벤트가 트리거되어 동일한 이벤트와 관련된 후속 호출에 관심이 있음을 나타내려면 true를 반환해야합니다.

HTH

+0

"SDK Documentation"링크에는 해당 페이지의 onTouch() 메소드 세부 정보가 없습니다 (링크가 변경되었을 수 있음). 그럼에도 불구하고 대답은 정확합니다. – vedant1811

+0

인용 된 텍스트는 여전히 링크 된 페이지에 있습니다. 이벤트 청취자 섹션의 끝. – Devunwired

+0

오 그렇습니다. 사실입니다. 내 잘못이야 – vedant1811