2017-01-14 12 views
1

Android 용 간단한 게임을 만들고 싶습니다. 여기에 플레이어에 버튼 목록이 표시됩니다. 그는 손가락을 스 와이프/드래그 할 수있는 기능이 있어야하며 화면 이동을 멈 추면 이동 결과가 표시됩니다.버튼 위로 호버/스 와이프 감지

Action_UP 및 Action_Down를 호출 할 때 내가 볼 수있는,하지만 난 Action_HOVER_MOVE을 사용할 수 없습니다

View.OnTouchListener OTL = new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) {   

     if (motionEvent.getAction()==MotionEvent.ACTION_DOWN 
       || motionEvent.getAction()==MotionEvent.ACTION_HOVER_MOVE) 

     { 
      Button B = (Button)view; 
      if (B.isActivated()) 
      { 
       String letter = B.getText()+""; 
       word+=letter; 
      } 
      B.setActivated(false); 
      Toast t = Toast.makeText(MainActivity.this,word,Toast.LENGTH_SHORT); 
      t.show(); 

     } 
     if (motionEvent.getAction()==MotionEvent.ACTION_UP) 
     { 
      Toast t = Toast.makeText(MainActivity.this,word,Toast.LENGTH_SHORT); 
      t.show(); 
      word=""; 
      resetButtons(); 
     } 

     return true; 
    } 
}; 

어떻게 다른 버튼 스 와이프를 감지?

+0

이 ACTION_HOVER_MOVE 마우스 이벤트에 사용하는 사람들에게 분명하지 않을 수있는 작동하지 않는 이유에 대해 혼란스러워하는 사람들을위한 아주 좋은 질문입니다. –

답변

1

이 문서 당, 당신은 아마() getActionMasked에 대한 ACTION_MOVE가

INT의 ACTION_MOVE
상수 원하는 : 변화는 (ACTION_DOWN과 ACTION_UP 사이) 기자 동작 중에 발생했습니다. 모션에는 가장 최근 포인트와 마지막 다운 이벤트 또는 이동 이벤트 이후의 중간 포인트가 포함됩니다.

당신은 ACTION_HOVER_MOVE에 문제가 발생하는 이유는

getActionMasked() 정수

INT의 ACTION_HOVER_MOVE
: 변화가 발생하지만, 포인터가 아래로 (ACTION_MOVE 달리)되지 않습니다. 모션에는 가장 최근 포인트와 마지막 호버 이동 이벤트 이후의 중간 포인트가 포함됩니다.

이 작업은 항상 포인터 아래의 창이나보기로 전달됩니다.

이 동작은 터치 이벤트가 아니므로 onTouchEvent (MotionEvent)가 아닌 onGenericMotionEvent (MotionEvent)로 전달됩니다.

출처 : https://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE