Android - 더블탭(double tap), 더블클릭, 더블터치

Android 2016. 1. 19. 23:46 posted by TechNote.kr


안드로이드 앱을 개발하다 보면 touch, back key 등 말고도 두번 터치(정확한 명칭은 함수상 이름으로 보면 double tap 인데 사실 함수명 보기 전에는 더블 클릭, 더블 터치등으로 검색했었다.) 뿐만 아니라 fling (슬라이드)등이 있다.


이 추가적인 동작들은 일반적인 event 함수 외에 GestureDetector Class를 통해 인지해 낼 수 있다.


GestureDetector

Detects various gestures and events using the supplied MotionEvents. The GestureDetector.OnGestureListener callback will notify users when a particular motion event has occurred. This class should only be used with MotionEvents reported via touch (don't use for trackball events). 

[출처 : developer.android.com]


위의 설명과 같이 onGestureListener를 통해 특정 motion을 인지할 수 있다.


interfaceGestureDetector.OnContextClickListenerThe listener that is used to notify when a context click occurs. 
interfaceGestureDetector.OnDoubleTapListenerThe listener that is used to notify when a double-tap or a confirmed single-tap occur. 
interfaceGestureDetector.OnGestureListenerThe listener that is used to notify when gestures occur. 
classGestureDetector.SimpleOnGestureListenerA convenience class to extend when you only want to listen for a subset of all the gestures. 


위중에서 GestureDetector.SimpleOnGestureListener를 통해 구현하는 코드는 다음과 같다.


public class TestActivity extends AppCompatActivity {


    private GestureDetectorCompat mDetector;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }


    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

        private static final String TAG = "Gesture";


        @Override

        public boolean onDown(MotionEvent event) {

            Log.d(TAG,"onDown: " + event.toString());

            return true;

        }


        @Override

        public boolean onFling(MotionEvent event1, MotionEvent event2,

                               float velocityX, float velocityY) {

            Log.d(TAG, "onFling: " + event1.toString()+event2.toString());

            return true;

        }


        @Override

        public boolean onDoubleTap(MotionEvent event) {

            Log.d(TAG, "onDoubleTap: " + event.toString());

            return true;

        }

    }

}


위와 같이 event 함수에 의해 각 motion을 구분해낼 수 있고, 각 동작에 대해 원하는 루틴을 구현하면 된다.