2012-03-13 8 views
2

ViewGroup을 확장하는 사용자 정의 레이아웃을 개발했습니다. 이제 저는 그것을 활동에 사용하고 싶습니다. 필자의 액티비티에서는이 레이아웃과 뷰 페이지를 모두 framelayout 안에 넣었다. 내 사용자 정의 레이아웃이 프레임 레이아웃을 채우고 내 viewPager 위에 있습니다.터치 이벤트를 형제보기로 전달합니다.

내 맞춤 레이아웃에서 클릭 이벤트를 처리하고 다른 모든 동작을 뷰 페이지로 이동하여 스크롤 할 수있게하고 싶습니다.

지금까지 관리하지 않았습니다. 클릭이 있었지만 뷰 페이지가 더 이상 스크롤 할 수 없거나 그 반대입니다. onTouchEvent 및 onInterceptTouchEvent를 재정의했습니다.

내가 알아 차린 것은 내가 커스텀 레이아웃에서 down 이벤트를 올바르게 받는다는 것이지만, 일단 viewpager에 의해 catch되면, 결코 거기에 도착하지 않는다. 터치 이벤트에 대한 형제보기 간의 통신은 어떻게해야합니까?

PS : 나는

답변

2

ACTION_DOWN 발생에 어느 onTouchEvent 또는 사용자 정의 레이아웃의 dispatchTouchEvent가 true를 반환해야합니다 아무 소용 splitMotionEvent을 시도하고 사용자 정의 레이아웃은 ACTION_MOVE 나중에 ACTION_UP을받을 것입니다.

0

내가 탭을 추적하고있는 곳에서 동일한 문제가 있었으며 OnTouchClickListener을 사용하여 스 와이프했습니다.

터치를 부모 및 뷰 자체에 전달하여 예정된 이벤트를 무시하므로 해결되었습니다 (형제의 터치/클릭이 호출되도록). 이벤트를 무시하지 않을 경우 소비하십시오.

코드는 다음과 같습니다

touchTrackingView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // do not consume this event so the sibling gets the touch/click 
     if (mIgnoreNextTouchEvent) { 
      mIgnoreNextTouchEvent = false; 
      return false; 
     } 
     // TODO do what you need to do with the touch 

     // next touch should be ignored so that 
     // the sibling gets their touch/click invoked 
     mIgnoreNextTouchEvent = true; 
     ((View) v.getParent()).dispatchTouchEvent(event); 
     return true; 
    } 
}); 
관련 문제