2011-09-20 5 views
1

이것은 꽤 간단해야하지만 뭔가 놓친 것 같습니다. ScrollView의 스크롤 이벤트 방향 (왼쪽/오른쪽/위/아래)을 어떻게 파악합니까?스크롤보기에서 스크롤 방향을 가져 옵니까?

가장 먼저 떠오르는 것은 getScrollX() 및 getScrollY()를 저장 한 다음 onTouchListener에 대한 다음 호출에서이를 비교하는 것입니다. 그것은 일을하는 올바른 방법입니까?

사용자 지정 HorizontalScrollView를 구현 중이므로 한 방향으로 만 스크롤과 페이지를 사용하지 않도록 설정해야합니다.

답변

7

조사에 따르면이 경우에 스크롤 수신기가 없다고합니다.
당신은 당신의 approch를 시도 할 수 있습니다. 내가 시도 할 것
또 다른 것은 onScrollChanged을 무시하는 것입니다 (전에 스크롤 위치를 제공하는) 등 자신있는 ScrollView

업데이트을 만드는 : 나를 위해
이 하나 workes합니다. 오른쪽으로 스크롤하지만 왼쪽으로 스크롤하지는 않습니다.

public class CustomScrollView extends HorizontalScrollView { 

    public CustomScrollView(Context context) { 
     super(context); 
    } 

    public CustomScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomScrollView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onScrollChanged(int w, int h, int ow, int oh) { 
     if (w < ow) { 
      scrollTo(ow, h); 
     } 
    } 
} 
+0

없음 내 접근이 작동하지 않았다 사용. ACTION_DOWN이 (가) 잡히지 않았습니다. ViewGroup이되는 HorizontalScrollView와 관련이 있습니다. 지금 당신의 접근 방식을 시도 중입니다. ViewGroup 문서에 따라 onInterceptOnTouchEvent 및 onTouchEvent를 재정의하는 것보다 간단 할 수 있습니다. –

+0

내 대답을 업데이트하고 나를 위해 작동하는 코드를 추가했습니다 ... – Knickedi

+0

작동 했습니까? 그것은 당신이 찾고있는 것입니까? 이 경우 요금을 부탁하십시오. – Knickedi

1

scrollView.setOnTouchListener(new View.OnTouchListener() { 
    float y1 = 0; 
    float y0 = 0; 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 

    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
     y0 = motionEvent.getY(); 
     Log.i("Y", motionEvent.getAction() + " + " + (y0 - y1)); 
    } else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) { 
     y1 = motionEvent.getY(); 
     if (y0 - y1 > 0) { 
     Log.i("Y", motionEvent.getAction() + " + " + (y0 - y1)); 
     } else if (y0 - y1 < 0) { 
     Log.e("Y", motionEvent.getAction() + " - " + (y0 - y1)); 
     } 
    } 

    return false; 
    } 
}); 
관련 문제