title: onInterceptTouchEvent, onTouchEvent only see ACTION_DOWN
body: <p>I have a top level ViewGroup, which I call SliderView, in which I want to detect swiping.  This is mostly working, but one weird failure persists.</p>
  
  <p>The essence of SliderView is to override onInterceptTouchEvent and, once the user is actually swiping, return "true" to prevent other views from seing the MotionEvent.  Here is a snip of code:</p>
  
  <pre><code>public class SliderView extends ViewGroup
  {
    enum MoveState { MS_NONE, MS_HSCROLL, MS_VSCROLL };
    private MoveState moveState = MoveState.MS_NONE;
  
    ... other code ...
  
    public boolean onInterceptTouchEvent(MotionEvent e)
    {
      final int action = e.getAction();
      switch (action &amp; MotionEvent.ACTION_MASK)
      {
        case MotionEvent.ACTION_DOWN:
          moveState = MoveState.MS_NONE;
          break;
  
        case MotionEvent.ACTION_MOVE:
          if (moveState == MoveState.MS_NONE)
          {
            if (motion is horizontal)
            {
              moveState = MoveState.MS_VSCROLL;
              return true;
            }
            else
              moveState = MoveState.MS_VSCROLL; // let child window handl MotionEvent
          }
          else if (moveState == MoveState.MS_HSCROLL)
            return true; // don't let children see motion event.
      }
      return super.onInterceptTouchEvent (e);
    }
  
    ... other code ...
  }
  </code></pre>
  
  <p>It is my understanding that my SliderView (which is the outermost view) should <em>always</em> recevie onInterceptTouchEvent.  In one of my tests, where the top level child is a However, in the following case, this appears not to be.</p>
  
  <p>When the top level child is a ScrollView, onInterceptTouchEvent gets ACTION_MOVE and my code does what I want.  In another case, where the top level child is a LinearLayout, it fails sometimes: it always gets ACTION_DOWN but gets ACTION_MOVE only if the user touches a widget inside the LinearLayout; if touching blank area, only ACTION_DOWN comes through.</p>
  
  <p>I'll note that it behaves as if the fail-case touches are happening outside the SliderView.  However, if that were the case, why would I get the ACTION_DOWN events?</p>
  
  <p>Second note: looking at the source code for ScrollView, I see it checking for "inChild"; I have not figured out what that's for and how it might be relevant.</p>