Android Memo
Android Double Click 기능 구현
DevSSAM
2024. 8. 6. 15:29
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)
}
}