如何忽略覆盖视图并检测onFling(onSwipe)?

问题描述:

我有一个很多孩子的看法。我需要的是在Swipe或Fling动作上实施反应。问题在于,如果我删除所有孩子,它才会真正起作用,否则,主布局顶部的子视图会尝试滑动。如何忽略覆盖视图并检测onFling(onSwipe)?

我都尝试加入onSwipeListener到主布局并添加GestureListener整个活动用同样的成功。

我现在的(非工作)解决方案是这样的:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_schedule); 

     main_layout = findViewById(R.id.schedule_main_view); 
     Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.fade); 
     main_layout.startAnimation(fadeInAnimation); 

     GestureDetector.SimpleOnGestureListener simpleOnGestureListener = 
       new GestureDetector.SimpleOnGestureListener() { 
        @Override 
        public boolean onDown(MotionEvent event) { 
         return true; 
        } 

        @Override 
        public boolean onFling(MotionEvent event1, MotionEvent event2, 
              float velocityX, float velocityY) { 
         Log.d(null,"Fling"); 
         int dx = (int) (event2.getX() - event1.getX()); 
         // don't accept the fling if it's too short 
         // as it may conflict with a button push 
         if (Math.abs(dx) > 20 
           && Math.abs(velocityX) > Math.abs(velocityY)) { 
          if (velocityX > 0) { 
           Log.d(DEBUG_TAG, "onFling: " + event1.toString() + event2.toString()); 
           Log.d(DEBUG_TAG, "onFling To Right"); 
          } else { 
           Log.d(DEBUG_TAG, "onFling: " + event1.toString() + event2.toString()); 
           Log.d(DEBUG_TAG, "onFling To Left"); 
          } 
          return true; 
         } else { 
          return false; 
         } 
        } 
       }; 

     shift = getIntent().getIntExtra(WEEK_SHIFT, CURRENT_WEEK); 
     mDetector = new GestureDetectorCompat(this,simpleOnGestureListener); 
     unDimScreen(); 
     setupWeek(); 
    } 

重复:如果该活动是在该州时,有在顶部没有子视图,它按预期工作。

所以,问题是:我能做些什么使活动获取手势忽略覆看法?

的问题是孩子的意见越来越触摸事件,而不是给它的父。 如果您不使用覆盖视图可点击事件,则可以关闭该视图的可点击属性,如view.setClickable(false); ...然后,所有点击事件将转到其父视图。如果没有工作,你可以在触摸监听器定义在这样每个覆观点:

view.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     return false; 
    } 
}); 

UPD: 下面这个问题的另一个(右)的解决方案:https://developer.android.com/training/gestures/viewgroup.html#delegate

+1

拦截触摸ViewGroup中的事件是我需要的。谢谢! –

尝试设置android:clickable="true"android:descendantFocusability="blocksDescendants"到您想要在xml文件中滑动的视图。这应该阻止儿童接收点击事件。

+0

这不行,谢谢你 –