2011-05-09 5 views
9

RelativeLayout에 리스너를 등록했습니다 (아래 참조). 일부 맞춤 이벤트 처리를 추가하고 싶습니다.Android : RelativeLayout의 onTouchEvent에서 ACTION_MOVE/UP을 볼 수 없습니다.

mOnTouchListener = new OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      final int action = motionEvent.getAction(); 
      boolean ret = false; 

      switch (action) { 
      case MotionEvent.ACTION_DOWN: 
       ret = doSth(motionEvent); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       ret = doSth(motionEvent); 
       break; 
      case MotionEvent.ACTION_UP: 
       ret = doSth(motionEvent); 
       break; 
      } 

      return ret;  // returning false got me none of MOVE/UP events right here 
     } 
    }; 

그러나 반환 된 true가 아닌 한 MOVE/UP 이벤트를 얻을 수 없습니다.

또 다른 시도, CheckBox에 동일한 수신기를 등록 했으므로 모든 것이 잘 진행되었습니다.
ViewGroup과 위젯간에 차이점이 있습니까? 디자인 목적?

답변

24

"그러나 반환 된 true가 아니면 MOVE/UP 이벤트를 얻을 수 없습니다."

고객님의 질문에 답변하셨습니다. 만약 당신이 걱정하고 이벤트를 처리하고 있다는 것을 나타내는 true을 돌려 보내지 않는다면 시스템에 당신이 신경 쓰지 않기 때문에 후속 이벤트를 보내지 않을 것입니다. 터치 이벤트의 전체 수명주기를 모니터링해야하는 경우 항상 true을 반환해야합니다.

+3

오케이, SDK에서 "청취자가 이벤트를 소비하면 True, 그렇지 않으면 거짓"이라고 생각하여 "소비"가 어쨌든 "걱정할 것"과 다르다고 생각했습니다. – fifth

관련 문제