MyGestureDetector extends SimpleOnGestureListener

I am implementing MyGestureDetector, which extends SimpleOnGestureListener. I took a class from http://www.codeshogun.com/blog/tag/view-flipper/ to enable the swipe action in ViewFlipper. I can’t get if I need to work on an emulator. Any suggestions?

Below is the whole code:

Home.java

import android.app.Activity; import android.os.Bundle; import android.view.GestureDetector; import android.view.KeyEvent; import android.view.MotionEvent;import android.view.View; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.webkit.WebView; import android.widget.ViewFlipper; public class main extends Activity { 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; private Animation slideLeftIn; private Animation slideLeftOut; private Animation slideRightIn; private Animation slideRightOut; private ViewFlipper viewFlipper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ---------------------------------Sets Swipe Animation to Next View --> viewFlipper = (ViewFlipper)findViewById(R.id.AC4313); slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); gestureDetector = new GestureDetector(new MyGestureDetector()); gestureListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { return true; } return false; } }; } 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) { viewFlipper.setInAnimation(slideLeftIn); viewFlipper.setOutAnimation(slideLeftOut); viewFlipper.showNext(); } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { viewFlipper.setInAnimation(slideRightIn); viewFlipper.setOutAnimation(slideRightOut); viewFlipper.showPrevious(); } } catch (Exception e) { // nothing } return false; } } @Override // ------------------------------ Catch the Gesture Event by Overriding onTouch() method: --> public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; else return false; } 

* .Xml's animation:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/> </set> 
+7
source share
2 answers

I think the problem is that you are not overriding the OnDown event. Add this piece of code to the MyGestureDetector class, and it should work.

 @Override public boolean onDown(MotionEvent e) { return true; } 

The OnDown event returns false by default, and each gesture starts with OnDown , so your onFling event onFling not fire.

Istvan

+11
source

It looks like you can now solve this problem with much less code using a gesture detector, for example:

 import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.widget.GridView; public class ScrollingGridView extends GridView { private GestureDetector gestureDetector; public ScrollingGridView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ScrollingGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setupGestureListener(); } private void setupGestureListener() { GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { scrollBy((int)distanceX, (int)distanceY); return true; } }; gestureDetector = new GestureDetector(getContext(), gestureListener); setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { gestureDetector.onTouchEvent(motionEvent); return true; } }); } } 
+2
source

All Articles