2015-01-05 1 views
1

저는 뷰 페이지가 있으며 부모 컨테이너에서 터치 이벤트를 가로 채고 싶습니다. ID가 "layoutContainer의"로 컨테이너에 onTouchListener를 연결하려고하면 뷰 페이저 아무것도 화재 이제까지 것이다 전체 화면을 차지하기 때문에 XML은이하위 XML 항목에서 터치 이벤트를 가로 챌 수 있습니까?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:id="@+id/layoutContainer" 
android:layout_height="match_parent" > 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="0dp" > 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </android.support.v4.view.ViewPager> 
</RelativeLayout> 
</RelativeLayout> 

것 같습니다.

는 내가 뭘하려고 또 다른 일을보기 호출기에 터치 리스너를 부착 한 후 수동으로 제스처 검출기에 모션 이벤트를 통과했다

private class MyGesture extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 

     return super.onSingleTapConfirmed(e); 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 

     Snap snap = snaps.get(targetPosition); 

     return super.onSingleTapUp(e); 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

     float deltaX = e2.getX() - e1.getX(); 
     float deltaY = e2.getY() - e1.getY(); 

     if ((Math.abs(deltaX) < SWIPE_MIN_DISTANCE) || (Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY)) { 

     } 
     else { 

     } 

     if ((Math.abs(deltaY) < SWIPE_MIN_DISTANCE) || (Math.abs(velocityY) < SWIPE_THRESHOLD_VELOCITY)) { 

     } 
     else { 
      app.log("swipe up"); 
      //execute some code here 
     } 
     return true; 
    } 

} 

화면에 수직 슬쩍 제스처를 감지 할 수 있도록하려면 그러나 이것도 작동하지 않습니다.

답변

0

컨테이너 뷰를 만들면 RelativeLayout을 확장하고이 뷰 그룹에서 onInterceptTouchEvent를 재정의 할 수 있습니다. 은 다음과 같습니다.

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      mDownX = event.getX(); 
      mDownY = event.getY(); 
      return false; 
     case MotionEvent.ACTION_MOVE: 
      if (Math.abs(event.getX() - mDownX) < Math.abs(event.getY() - mDownY)) { // Up and down around sliding distance is greater than sliding distance; 
       return true; 
      } 
      return false; 
     default: 
      break; 
    } 
    return false; 
} 
관련 문제