2014-12-05 3 views
0

ButtonsonClickListener 나는이 다음 코드 : enter(words, linearLayout, llp, view);으로 스 와이프 제스처가 인식되지 들어

대신 시급한의

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

Button, 나는 단순히 어느 방향으로 화면을 Swipe과 같은 방법을 실행하려는 입력

현재 제 프로그램이 제스처를 전혀 인식하지 못한다고 생각합니다. 내가 enter(words, linearLayout, llp, view);을 잘못 배치했기 때문이라고 생각합니다. 또한 모든 Gesture 인식 코드를 onCreate() 안에 넣었습니다. 이것이 코드를 프로그래밍하는 올바른 방법입니까?

누군가 도와 드릴 수 있습니까?

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

}

답변

2

당신은 View.onTouchEvent()를 오버라이드 (override) 할 필요가있다.

@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

+0

Fling을 듣고 싶은 어떤 관점에서든 View.onTouchEvent()를 오버라이드 할 수 있습니다.이 경우에는 Activity 클래스를 사용합니다. 'SimpleOnGestureListener.onFling()'당신은 이미 가지고 있고, 아무것도하지 않습니다. – tachyonflux

+0

죄송합니다. 어디에서 onFling()을 호출합니까? 온 터치 내부? 아니면 SimpleGesture에있는 onFling()을 변경합니까? – user2456977

관련 문제