티스토리 뷰

PC에는 익숙한 개념이지만,

모바일에서는 익숙하지 않은 더블클릭(터치).

 

Android UX상 롱클릭을 사용하는 편이 좋으나,

혹시 필요한 경우가 생길 수도 있을꺼 같아, 예전에 만든 소스를 넣어두기로 했다.

 

private int doubleClickFlag = 0;
private final long  CLICK_DELAY = 250;
private void setDoubleClick() {
    findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            doubleClickFlag++;
            Handler handler = new Handler();
            Runnable clickRunnable = new Runnable() {
                @Override
                public void run() {
                    doubleClickFlag = 0;
                    // todo 클릭 이벤트
                }
            };
            if( doubleClickFlag == 1 ) {
                handler.postDelayed( clickRunnable, CLICK_DELAY );
            }else if( doubleClickFlag == 2 ) {
                doubleClickFlag = 0;
                // todo 더블클릭 이벤트
            }
        }
    });
}

CLICK_DELAY 값 조절로 더블클릭 사이의 인터벌을 조정할 수 있다!!

 

[2024-08-06] 더블클릭 이벤트와 클릭이벤트가 같이 들어온다는 의견이 있어 추가 수정한다.

private var doubleClickFlag = 0
private val CLICK_DELAY: Long = 250
private fun setDoubleClick() {
    findViewById<View>(R.id.btn1).setOnClickListener {
        doubleClickFlag++
        val handler = Handler(Looper.getMainLooper())
        val clickRunnable = Runnable {
            doubleClickFlag = 0
            // todo 클릭 이벤트
        }
        if (doubleClickFlag == 1) {
            handler.postDelayed(clickRunnable, CLICK_DELAY)
        } else if (doubleClickFlag == 2) {
            doubleClickFlag = 0
            handler.removeCallbacks(clickRunnable)
            // todo 더블클릭 이벤트
        }
    }
}

 

 

또한, 제스처 리스너를 통해서 하는 방법도 있기 때문에 추가한다.

private fun setDoubleTouchEvent() {
    try {
        val doubleGesture = GestureDetector(context, DoubleTapGestureListener())
        View.findViewById<View>(R.id.btn1).setOnTouchListener(OnTouchListener { _, event ->
            if (// 더블클릭 동작 조건 ) {
                doubleGesture.onTouchEvent(event)
                return@OnTouchListener true
            }
            false
        )
    }catch (e: Exception) {
        e.printStackTrace()
    }
}

private inner class DoubleTapGestureListener : SimpleOnGestureListener() {
    override fun onDoubleTap(e: MotionEvent): Boolean {
        // todo 더블 클릭
        return super.onDoubleTap(e)
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함