티스토리 뷰

Mobile/Android

[Android]GestureDetector

out of coding 2014. 9. 4. 16:34

GestureDetector에 대해서 알아보도록 한다.


일반적인 onTouch에서 이벤트를 받아서 처리를 하려면 조금 만들어줘야한다.

그러나 이런것들은 만들어져 있다.


interface GestureDetector.OnDoubleTapListener : 두 번 터치했을 경우의 관련 리스너

interface GestureDetector.OnGestureListener : 일반적인 제스처들, 한 번 터치나 스크롤 관련 리스너 인터페이스의 모든 메서드를 반드시 구현해야 한다.

class GestureDetector.SimpleOnGestureListener : 클래스를 확장하여 모든 제스처에 사용할 수 있다. (위의 두개를 모두 포함함)


onDown() : 터치하려고 손을 대기만 해도 호출되는 메서드이며, 모든 제스처의 시작이다.

onSingleTapUp() : 한번 터치 제스처 중에 UP 이벤트가 발생했을 경우, 호출되는 메서드이다.

onSingleTapConfirmed() : 한번 터치 했을 경우, 호출되는 메서드이다.

onDoubleTap() : 두 번 터치를 했을 경우, 호출되는 메서드이다.

onDoubleTapEvent() : 두 번 터치 제스처 중에 DOWN/MOVE/UP 이벤트가 발생했을 경우, 호출되는 메서드이다.

onLongPress() : 길게 눌렀을 경우, 호출되는 메서드이다.

onShowPress() : 터치 화면을 처음 눌렀을 경우, 그러나 손가락을 떼거나 다른곳으로 이동하기 전에 호출되는 메서드이다. 터치가 감지되었음을 시청각적으로 표시하고자 할 때 유용하다.

onScroll() : 손가락으로 화면을 누른 채 손가락을 일정한 속도와 방향으로 움직인 후 떼었을 경우, 호출되는 메서드이다.

onFling() : 손가락으로 화면을 누른 채 가속도를 붙여서 손가락을 움직인 후 떼었을 경우, 호출되는 메서드이다. 이를 던지기(Fling) 또는 튀기기(Flick)라고 부른다. 이 제스처에 대한 일반적인 반응 방식은, 손가락을 뗀 후에도 대상이 일정 기간 동안 계속 움직이게 하는 것이다.


예제.

public class GustureDetectTest extends Activity {

	private GestureDetector mGestureDetector;

	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		mGestureDetector = new GestureDetector(this, mOnSimpleOnGestureListener);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {

		// 여기에서는 터치 이벤트를 넘겨주어서 받고 난후, 리턴값을 돌려준다.
		// 일반 뷰에 붙여도 된다.
		return mGestureDetector.onTouchEvent(event);
	}

	private GestureDetector.SimpleOnGestureListener mOnSimpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() {

		@Override
		public boolean onSingleTapUp(MotionEvent e) {

			return false;
		}

		@Override
		public void onShowPress(MotionEvent e) {

		}

		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

			return false;
		}

		@Override
		public void onLongPress(MotionEvent e) {

		}

		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

			return false;
		}

		@Override
		public boolean onDown(MotionEvent e) {

			return false;
		}

		@Override
		public boolean onDoubleTap(MotionEvent e) {

			return super.onDoubleTap(e);
		}

		@Override
		public boolean onDoubleTapEvent(MotionEvent e) {

			return super.onDoubleTapEvent(e);
		}

		@Override
		public boolean onSingleTapConfirmed(MotionEvent e) {

			return super.onSingleTapConfirmed(e);
		}
	};
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함