Home Fling gesture detection on grid layout

# Fling gesture detection on grid layout

user8570
1#
user8570 Published in September 19, 2018, 11:03 am

I want to get fling gesture detection working in my Android application.

What I have is a GridLayout that contains 9 ImageViews. The source can be found here: Romain Guys's Grid Layout.

That file I take is from Romain Guy's Photostream application and has only been slightly adapted.

For the simple click situation I need only set the onClickListener for each ImageView I add to be the main activity which implements View.OnClickListener. It seems infinitely more complicated to implement something that recognizes a fling. I presume this is because it may span views?

• If my activity implements OnGestureListener I don't know how to set that as the gesture listener for the Grid or the Image views that I add.

public class SelectFilterActivity extends Activity implements
View.OnClickListener, OnGestureListener { ...

• If my activity implements OnTouchListener then I have no onFling method to override (it has two events as parameters allowing me to determine if the fling was noteworthy).

public class SelectFilterActivity extends Activity implements
View.OnClickListener, OnTouchListener { ...

• If I make a custom View, like GestureImageView that extends ImageView I don't know how to tell the activity that a fling has occurred from the view. In any case, I tried this and the methods weren't called when I touched the screen.

I really just need a concrete example of this working across views. What, when and how should I attach this listener? I need to be able to detect single clicks also.

// Gesture detection
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int dx = (int) (e2.getX() - e1.getX());
// don't accept the fling if it's too short
// as it may conflict with a button push
if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.absvelocityY)) {
if (velocityX > 0) {
moveRight();
} else {
moveLeft();
}
return true;
} else {
return false;
}
}
});


Is it possible to lay a transparent view over the top of my screen to capture flings?

If I choose not to inflate my child image views from XML can I pass the GestureDetector as a constructor parameter to a new subclass of ImageView that I create?

This is the very simple activity that I'm trying to get the fling detection to work for: SelectFilterActivity (Adapted from photostream).

I've been looking at these sources:

• Detect Gestures - Tutorial

• SDK docs

• Calculator Code

Nothing has worked for me so far and I was hoping for some pointers.

• Hey, I am having problems with my GestureDetector, and I was hoping you could take a look at it. I posted a question with what code I have: stackoverflow.com/questions/11742051/… – Andy Jul 31 '12 at 15:33