Question

i am making a music player for android but i recently updated it with swipe gestures but the thing is that only one gesture(bottom swipe is working) i checked the swipe gesture class and nothing seems to be wrong in that

here is the code of my implementation

LinearLayout LL=(LinearLayout) findViewById(R.id.LL);
LL.setOnTouchListener(new OnSwipeTouchListener() {
            public void onSwipeTop() {
                mp.stop();
                mp.release();
            }
            public void onSwipeRight() {
                mp.stop();
                mp.release();

            }
            public void onSwipeLeft() {
                mp.stop();
                mp.release();

            }
            public void onSwipeBottom() {
                mp.stop();
                mp.release();
            }
        }); 

and here is my class for swiping

public class OnSwipeTouchListener  extends Activity implements OnTouchListener{

    private final GestureDetector gestureDetector = new GestureDetector(new GestureListener());

    public boolean onTouch(final View view, final MotionEvent motionEvent) {
       // super.onTouch(view, motionEvent);
        return gestureDetector.onTouchEvent(motionEvent);
    }

    private final class GestureListener extends SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 70;
        private static final int SWIPE_VELOCITY_THRESHOLD = 60;

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

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY))
                {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) 
                    {
                        if (diffX > 0)
                        {
                            onSwipeRight();
                        } 
                        else 
                        {
                            onSwipeLeft();
                        }
                    }
                }
                else 
                {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD)
                    {
                        if (diffY > 0) 
                        {
                            onSwipeBottom();
                        } else {
                            onSwipeTop();
                        }
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
        }
    }

    public void onSwipeRight() {
    }

    public void onSwipeLeft() {
    }

    public void onSwipeTop() {
    }

    public void onSwipeBottom() {
    }
}
Was it helpful?

Solution

Seems like there was no problem with the code....but the problem was with the view,the xml file..

the linear layout was not filling the whole space...so the only swipe which was working was the bottom swipe...and that too only in the top region.(where the linear layout existed)......

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top