简体   繁体   中英

Swipe gesture not recognized

For my Buttons onClickListener I have the following code:

on_enter_button.setOnClickListener(
        new View.OnClickListener()
        {
            public void onClick(View view)
            {
                enter(words, linearLayout, llp, view);
             }
        });

Instead of pressing enter Button , I simply want to Swipe the screen in any direction and run the same method: enter(words, linearLayout, llp, view);

Currently I think my program does not recognize Swipe gestures at all. I assume it's because I placed enter(words, linearLayout, llp, view); incorrectly. Also, I put all the Gesture recognition code inside the onCreate() . Is that the correct way to program the code?

Can someone please help?

EDITED CODE:

public class Game extends Activity{

public void enter(String[] w, LinearLayout ll, LinearLayout.LayoutParams params, View v){
... //some code
... //some code
... //some code
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    return myGestureDetector.onTouchEvent(event);
    //error myGestureDetector not recognized since it's created in onCreate so it does not exist here
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_activity);

     SimpleOnGestureListener mySimpleGestureListener = new SimpleOnGestureListener()
     {

        @Override
        public boolean onDoubleTap(MotionEvent e) { 
            return super.onDoubleTap(e);
        }

        @Override
        //swipe does not work!
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) 
        {
                enter(words, linearLayout, llp, view);
                return super.onFling(e1, e2, velocityX, velocityY);
        }

        @Override
        public void onLongPress(MotionEvent e) {
            super.onLongPress(e);
        }

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            return super.onSingleTapConfirmed(e);
        }

        private boolean permissibleYVelocity(float velocityY)
        {
            if ((velocityY < -200) || (velocityY > 200))
            {
                return false;
            }
            else
            {
                return true;
            }
        }   
    };

    final GestureDetector myGestureDetector = new  GestureDetector(getApplicationContext(), mySimpleGestureListener);

    //button listener works
    on_enter_button.setOnClickListener(
            new View.OnClickListener()
            {
                public void onClick(View view)
                {
                    enter(words, linearLayout, llp, view);
                 }
            });
    }

}

You need to override View.onTouchEvent() .

@Override
public boolean onTouchEvent(MotionEvent event) {
    return mGestureDetector.onTouchEvent(event);
}

Call your method in SimpleOnGestureListener.onFling():

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) 
{
    enter(words, linearLayout, llp, view);
    return true;
}

EDIT: Setup your GestureDectector in onCreate() as well:

mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener()
{
    @Override
    public boolean onDoubleTap(MotionEvent e) {
        return super.onDoubleTap(e);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY)
    {
        enter(words, linearLayout, llp, view);
        return super.onFling(e1, e2, velocityX, velocityY);
    }

    @Override
    public void onLongPress(MotionEvent e) {
        super.onLongPress(e);
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        return super.onSingleTapConfirmed(e);
    }

    private boolean permissibleYVelocity(float velocityY)
    {
        if ((velocityY < -200) || (velocityY > 200))
        {
            return false;
        }
        else
        {
            return true;
        }
    }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM