title: How to differentiate between a fling and a touch?
body: <p>I have a ListView inside of a ViewFlipper which I am flipping when the user swipes across the screen. Clicking on a ListView will open the browser. Sometimes when I am swiping, it gets detected as a touch on the ListView and will open the browser. This can be annoying. How can I prevent this from happening?</p>
  
  <pre><code>class MyGestureDetector extends SimpleOnGestureListener {
          @Override
          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
              try {
                  if (Math.abs(e1.getY() - e2.getY()) &gt; SWIPE_MAX_OFF_PATH)
                      return false;
                  // right to left swipe
                  if (e1.getX() - e2.getX() &gt; SWIPE_MIN_DISTANCE &amp;&amp; Math.abs(velocityX) &gt; SWIPE_THRESHOLD_VELOCITY) {
                      viewFlipper.setInAnimation(slideLeftIn);
                      viewFlipper.setOutAnimation(slideLeftOut);
                      viewFlipper.showNext();
                  } else if (e2.getX() - e1.getX() &gt; SWIPE_MIN_DISTANCE &amp;&amp; Math.abs(velocityX) &gt; SWIPE_THRESHOLD_VELOCITY) {
                      viewFlipper.setInAnimation(slideRightIn);
                      viewFlipper.setOutAnimation(slideRightOut);
                      viewFlipper.showPrevious();
                  }
  
                  if (viewFlipper.getDisplayedChild() == 0) {
                      // TODO: light up left
                      flipperPosition = 0;
                  } else if (viewFlipper.getDisplayedChild() == 1) {
                      // TODO: light up middle
                      flipperPosition = 1;
                  } else if (viewFlipper.getDisplayedChild() == 2) {
                      // TODO: light up right
                      flipperPosition = 2;
                  }
              } catch (Exception e) {
                  System.out.println(e);
              }
              return false;
          }
      }
  
  protected MotionEvent downStart = null;  
  
          public boolean onInterceptTouchEvent(MotionEvent event) {  
  
              switch(event.getAction()) {  
              case MotionEvent.ACTION_DOWN:  
                  // keep track of the starting down-event  
                  downStart = MotionEvent.obtain(event);  
                  break;  
              case MotionEvent.ACTION_MOVE:  
                  // if moved horizontally more than slop*2, capture the event for ourselves  
                  float deltaX = event.getX() - downStart.getX();  
                  if(Math.abs(deltaX) &gt; ViewConfiguration.getTouchSlop() * 2)  
                      return true;  
                  break;  
              }  
  
              // otherwise let the event slip through to children  
              return false;  
          }  
  </code></pre>