Mobile/Android
[Android] ListView에서 스크롤 방향 체크하기
louis.dev
2013. 11. 14. 16:31
ListView에서 스크롤 방향 체크하기
스크롤뷰, 혹은 리스트뷰에서 터치이벤트를 이용해서 스크롤이 위, 아래중 어디로 움직이는지 확인하는 방법을 포스팅해 보겠습니다.boolean firstDragFlag = true; boolean dragFlag = false; //현재 터치가 드래그 인지 확인 float startYPosition = 0; //터치이벤트의 시작점의 Y(세로)위치 listView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (ev.getAction()) { case MotionEvent.ACTION_MOVE: //터치를 한 후 움직이고 있으면 dragFlag = true; if(firstDragFlag) { //터치후 계속 드래그 하고 있다면 ACTION_MOVE가 계속 일어날 것임으로 무브를 시작한 첫번째 터치만 값을 저장함 startYPosition = ev.getY(); //첫번째 터치의 Y(높이)를 저장 firstDragFlag= false; //두번째 MOVE가 실행되지 못하도록 플래그 변경 } break; case MotionEvent.ACTION_UP : endYPosition = ev.getY(); firstDragFlag= true; if(dragFlag) { //드래그를 하다가 터치를 실행 // 시작Y가 끝 Y보다 크다면 터치가 아래서 위로 이루어졌다는 것이고, 스크롤은 아래로내려갔다는 뜻이다. // (startYPosition - endYPosition) > 10 은 터치로 이동한 거리가 10픽셀 이상은 이동해야 스크롤 이동으로 감지하겠다는 뜻임으로 필요하지 않으면 제거해도 된다. if((startYPosition > endYPosition) && (startYPosition - endYPosition) > 10) { //TODO 스크롤 다운 시 작업 } //시작 Y가 끝 보다 작다면 터치가 위에서 아래로 이러우졌다는 것이고, 스크롤이 올라갔다는 뜻이다. else if((startYPosition < endYPosition) && (endYPosition - startYPosition) > 10) { //TODO 스크롤 업 시 작업 } } startYPosition = 0.0f; endYPosition = 0.0f; motionFlag = false; break; } return false; } });이렇게 터치 이벤트를 통해서 스크롤의 진행방향을 체크하면 됩니다.