Home > DeveloperSection > Interviews > Android - basic gesture detection

Posted on    May-19-2015 1:33 AM

 Android Android 
Ratings:
 2 Answer(s)
  523  View(s)
Rate this:

Chintoo Semi

Total Post:79

Points:395
Posted on    May-19-2015 1:33 AM

I've been battling to get fling gesture detection working on my Android application today.Nothing has worked for me please help

Mayank Tripathi
Mayank Tripathi

Total Post:807

Points:4035
Posted on    May-19-2015 8:11 AM

Let your activity implement OnClickListener as usual:

public class SelectFilterActivity extends Activity implements OnClickListener
{
    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;
    private GestureDetector gestureDetector;
    View.OnTouchListener gestureListener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /* ... */
        // Gesture detection
        gestureDetector = new GestureDetector(this, new MyGestureDetector());
        gestureListener = new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        };
    }
    class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
                }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }
            @Override
        public boolean onDown(MotionEvent e) {
              return true;
        }
    }
}

Attach your gesture listener to all the views you add to the main layout;

// Do this for each view added to the grid
imageView.setOnClickListener(SelectFilterActivity.this); 
imageView.setOnTouchListener(gestureListener);
Watch in awe as your overridden methods are hit, both the onClick(View v) of the activity and the onFling of the gesture listener.

public void onClick(View v) {
        Filter f = (Filter) v.getTag();
        FilterFullscreenActivity.show(this, input, f);
}
The post 'fling' dance is optional but encouraged.

Hope this helps someone else!

Don't want to miss updates? Please click the below button!

Follow MindStick