2013-03-29 6 views
0

Views가 서로 위에 있고 별도의 리스너를 가질 수 있는지 궁금합니다. 특히, 나는 정확히 서로 꼭대기에 앉아 있고 정확히 동일한 차원 인 두 개의 뷰를 가지고 있으며 view_one에 대한 모션 이벤트 OnTouchListener와 view_two에 대한 OnLongPressListener를 구현하려고합니다. 그러나 view_one의 OnTouchListener가 view_one의 OnLongClickListener를 차단하는 것으로 보입니다.겹쳐보기를위한 터치 리스너

  • 짧은 클릭 한 가지
  • 길게 누르면 다른
  • 터치 드래그를 수행하고 수직 방향으로 방출 않는
      다른 작업을 수행합니다

      코드의 기본 목표는 여러 터치 상호 작용이 서로 다른 일을하는 것입니다 수평 다른

    기타, 많은 다른 일에 일

  • 터치 드래그 가능한 한.

    아마도 두 개가 아닌 하나의보기 만 있으면되고 터치 및 모션 이벤트를 구분할 수있는 방법이있을 것입니다. 짧고 긴 프레스 이벤트를 구분하는 방법을 알고 있지만 모션 이벤트는 상황을 망칠뿐입니다.

    나는 이것을 할 수있는 훨씬 좋은 방법이있을 것이라고 확신합니다. 어떤 힌트 나 제안도 감사합니다. 어떤 동작을 취할 지 결정하는 데 도움이되는 슬라이드 동작 및 터치 지속 시간의 길이를 제한하는 방법이 있습니까?

  • +0

    편집 해 주셔서 감사 드리며, 다음 번에 더 많은 작업을 진행하겠습니다. 이와 같은 코멘트는 주제와 관련이 없으며 허용되지 않는 것입니까? – jdods

    +0

    두 개의보기가 같은 크기 인 경우 왜 맨 위보기에서 터치를 사용하는 대신 두 가지 모두에서 터치를 감지해야합니까? 보기 1에서 길게 누르는 것은 정확하게 동일한 치수 및 위치 인 경우보기 2에서 길게 누르는 것과 동일합니다 ... – ab11

    +0

    네, 맞습니다. 나는이 모든 잘못에 대해서 가려고했습니다. 아래 카일의 해결책은 내 문제를 해결했다. – jdods

    답변

    0

    질문의 첫 번째 부분에 대답하려면 - 터치 리스너가 이벤트가 view_two (아래보기)에 도달하기 전에 이벤트를 소비하는 경우 onTouchListener에서 터치 이벤트를 사용 중이기 때문일 수 있습니다.

    //Returns true if the listener has consumed the event, false otherwise. 
    public abstract boolean onTouch (View v, MotionEvent event) 
    

    당신은 항상이 방법에 false를 반환하고 있습니까? 그렇지 않은 경우 계층 구조의 다음 뷰로 전파되지 않는 이벤트가 있습니다.

    두 번째 질문에 대해서는 그렇습니다.이 모든 이벤트를 처리하기 위해 확실히 onTouchListener을 만들 수 있습니다. 여기 (가 얼마나 많은 운동의 독립) 짧고 긴 눌러를 수행하는 예이다 : 당신이 상상할 수 있듯이

    private MotionEvent downEvent; 
    
    public abstract boolean onTouch (View v, MotionEvent event){ 
        if (downEvent == null && event.getAction == MotionEvent.ACTION_DOWN){ 
         downEvent = event; 
         return false; 
        } 
    
    
        if (event.getAction == MotionEvent.ACTION_UP){ 
         if (event.getDownTime() > LONG_PRESS_THRESHOLD){ 
          ... do something ... 
         } else if (event.getDownTime() > SHORT_PRESS_THRESHOLD){ 
          ... do something else ... 
         } 
        } 
    } 
    

    , 그것은 단지 결정하기 위해 좀 더 많은 노력 라인을 경우 델타 X/델타 Y 사이 다운 이벤트 및 현재 이벤트가 이벤트 3 및 4에 대해 결정한 임계 값을 충족합니다.

    +0

    좋아, 그게 많은 의미가있어. 좀 더 많은 검색 기능과 많은 작업을 통해이 기능을 구현할 수있었습니다. 감사!!! 위의 몇 가지 오타가 있다고 생각합니다. getAction(). 나는 그것이 작동하도록 괄호를 추가해야했습니다. 또한 getDownTime()은 시스템에 down 이벤트가 발생한 시간을 알려주므로 문제가 발생하므로 up 이벤트가 발생한 시간을 얻기 위해 getEventTime()을 구현하고 다른 임계 값과 비교하기 위해 차이를 가져와야했습니다 내가 선언하는 시간. – jdods