2014-12-05 49 views
0

對於我ButtonsonClickListener我有以下代碼:掃動手勢不承認

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

}

回答

2

你需要重寫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; 
     } 
    } 
}); 
+0

難道我在SimpleOnGestureListener覆蓋這些類? – user2456977 2014-12-05 01:56:57

+0

你可以在任何視圖中重寫'View.onTouchEvent()''''''''''''''''''' 'SimpleOnGestureListener.onFling()'你已經有了,它只是沒有做任何事情。 – tachyonflux 2014-12-05 02:00:44

+0

對不起,我是新來的。我在哪裏打電話onFling()?在onTouch裏面?或者我只是改變SimpleGesture中的onFling()方法? – user2456977 2014-12-05 02:05:25