繁体   English   中英

滑动手势无法识别

[英]Swipe gesture not recognized

对于我的Buttons onClickListener我具有以下代码:

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

而不是按Enter Button ,我只想向任何方向Swipe屏幕并运行相同的方法: enter(words, linearLayout, llp, view);

目前,我认为我的程序根本无法识别Swipe手势。 我认为这是因为我放置了enter(words, linearLayout, llp, view); 错误地。 另外,我将所有Gesture识别代码放在onCreate() 那是编写代码的正确方法吗?

有人可以帮忙吗?

编辑代码:

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);
                 }
            });
    }

}

您需要重写View.onTouchEvent()

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

在SimpleOnGestureListener.onFling()中调用您的方法:

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

编辑:在onCreate()中也设置您的GestureDectector:

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;
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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