2012-07-26 3 views
1

내 안드로이드 응용 프로그램에서. 나는이보기에서 전 단지 수직 스크롤을 피하기 위해 파노라마보기가 있습니다. 그래서 난 onTouchEvent(MotionEvent event) 메서드를 사용하여 해제.android에서보기의 수직 스크롤을 사용 중지하는 방법은 무엇입니까?

청각이 코드입니다.

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if(event.getAction()==MotionEvent.ACTION_UP){ 
     Log.d(TAG, "onTouchEvent:ACTION_UP"); 
     return false; 
    }else if(event.getAction()==MotionEvent.ACTION_DOWN){ 
     Log.d(TAG, "onTouchEvent:ACTION_DOWN");  
     return false; 
    }else{ 
     Log.d(TAG, "onTouchEvent:ACTION_UNKWON"); 
     return super.onTouchEvent(event); 
    } 

} 

그러나 가로로 스크롤해도 가로 스크롤이 불가능합니다. 어떻게 해결할 수 있습니까 ??

답변

6

나는 ACTION_DOWNACTION_UP이라는 오해를 오해했다고 생각합니다.

ACTION_DOWN은 손가락이 터치 스크린에 닿았을 때 ACTION_UP은 터치 스크린에서 손가락을 뗍니다. 당신이 ACTION_MOVE에서 좌표에서 터치 이벤트의 방향을 확인하고 운동 여부를 차단할지 여부를 결정하고 ACTION_UP에 변수를 재설정, 모션 이벤트가 시작된 ACTION_DOWN에 표시 할 수 있습니다 말했다

.

float startX 
float startY; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     startX = event.getX(); 
     startY = event.getY(); 
     break; 
    case MotionEvent.ACTION_MOVE: 
     float currentX = event.getX(); 
     float currentY = event.getY(); 

     float diffX = Math.abs(currentX - startX); 
     float diffY = Math.abs(currentY - startY); 

     // The purpose of the +100 is to make sure that we have a big enough 
     // difference between the 2 directions, eg. it's not diagonal 
     if(diffY > diffX + 100){ 
      return false; 
     } 
     break; 
    case MotionEvent.ACTION_POINTER_UP: 

     break; 
    } 

    return true; 
} 
+0

내가이 notation.i가 도움 코드와의 작업 덕분에 시도 오해. :) –

+0

그래 Paradx와 m 응답 업데이트 –

1

나는이 파노라마보기 위해 작동하는 방법을 잘 모르겠지만, 다른 뷰를 위해 나는 (스크롤이 매우 짧은 운동이기 때문에 나는 보통 별거를 사용) 스크롤/날뛰는 움직임을 잡으려고 GestureDetector를 사용 :

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY){ 
    if (Math.abs(distanceY) > Math.abs(distanceX)) 
    return true;// mark the vertical scroll as handled and do nothing 
    return false; 
} 

다른 옵션은 onTouchEvent를 사용하는 것이지만 ACTION_MOVE에서는 수직 스크롤이있을 때이를 감지해야합니다 (paradx에서 말한 것처럼).

는 희망이 도움 :)

내가 예를 들어
+0

이것은 아주 좋은 속임수입니다. –

관련 문제