implelenting onUp event handler using SimpleOnGestureListener
<p>I'm kinda new to Android programming and I recently turned my attention to handling simple gestures. I know about the GestureDetector and the listener and I succesfully implemented simple gestures (onDown, onFling, onScroll) which I need.
The problem is I need the onUp method which is not available in the SimpleOnGestureListener class.
I have an activity and a custom View. The view doesn't really do anything, just changes the background color. I'm doing all the event handling in the activity.</p>

<p>What I tried is handling the ACTION_UP event in the view's onTouchListener's onTouch method, but this way onFLing won't work.
I also read about a solution here: <a href="http://stackoverflow.com/questions/5722719/onup-event-on-gesturedetector">OnUp event on GestureDetector</a> ,which says I should overwrite the onTouchEvent but it was unclear to me which onTouchEvent should I overwrite, where and how.
I'm inserting my current code, maybe it helps. :)</p>

<pre><code>public class Main extends Activity 
{
private GestureDetector gDetector;
public CustomView cView;
View.OnTouchListener gestureListener;

private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

public Vibrator vibrator;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    vibrator = (Vibrator)getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
    gDetector=new GestureDetector(this, new gListener());
    gDetector.setIsLongpressEnabled(true);
    gestureListener=new View.OnTouchListener(){

        public boolean onTouch(View v, MotionEvent event) 
        {
            if(event.getAction()==MotionEvent.ACTION_UP)
            {
                cView.setBackgroundColor(Color.RED);
                return true;
            }
            else
            return gDetector.onTouchEvent(event);
        }
    };
    cView=new CustomView(this);
    cView.setOnTouchListener(gestureListener);
    cView.setBackgroundColor(Color.BLACK);
    cView.setLongClickable(true);
    setContentView(cView);
}

class gListener extends GestureDetector.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;
             if(e1.getX() - e2.getX() &gt; SWIPE_MIN_DISTANCE &amp;&amp; Math.abs(velocityX) &gt; SWIPE_THRESHOLD_VELOCITY) {
                 cView.setBackgroundColor(Color.WHITE);
             }  else if (e2.getX() - e1.getX() &gt; SWIPE_MIN_DISTANCE &amp;&amp; Math.abs(velocityX) &gt; SWIPE_THRESHOLD_VELOCITY) {
                 cView.setBackgroundColor(Color.GRAY);
             }
         } catch (Exception e) {
             // nothing
         }
         return false;
     }

     @Override
     public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
     {
         vibrator.vibrate(30);
         Log.d("Event", "MOVE");
         return true;
     }

     @Override
     public boolean onDown(MotionEvent e)
     {
         cView.setBackgroundColor(Color.BLUE);
         Log.d("Event", "DOWN");
         return true;
     }

     @Override
     public boolean onSingleTapUp(MotionEvent e)
     {
         Log.d("Event", "UP"); 
         return true;
     }

}
</code></pre>

<p>}</p>
