return@setOnTouchListener true / false

문제

우선 코드부터

package com.example.event

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.MotionEvent
import android.view.View

class MainActivity : AppCompatActivity() {
    private val view1 : View by lazy {
        findViewById(R.id.view1)
    }

//    private val view2 : View by lazy {
//        findViewById(R.id.view2)
//    }
//
//    private val view3 : View by lazy {
//        findViewById(R.id.view3)
//    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        view1ClickListener()
    }

    private fun view1ClickListener() {
        view1.setOnTouchListener { _:View, event:MotionEvent ->
            when(event.action) {
                MotionEvent.ACTION_DOWN -> Log.d("action", "손가락 눌림")
                MotionEvent.ACTION_MOVE -> Log.d("action", "손가락 이동")
                MotionEvent.ACTION_UP -> Log.d("action", "손가락 땜")
            }
            return@setOnTouchListener true
        }
    }
}

setOnTouchLister의 Motion 감지 과정을 알고 싶어서 직접 구현하고 Log.d로 출력해보는데 화면을 처음 눌렀을 때만 로그가 찍히고 손가락을 움직이거나 땠을 때는 로그가 찍히지 않길래 어리둥절 하던 도중 return 값을 true로 변경해 주었더니 정상적으로 로그가 찍혔다. 첫 번째 사진이 return@setOnTouchListener false이고 두 번째 사진이 return@setOnTouchListener True이다.

정리하자면 true는 발생한 터치 이벤트를 전달하지 않고 끝내고, false는 발생한 터치 이벤트를 이후에 과정(onTouch -> onClick -> onLongClick)까지 전달하게 된다.

좋은 웹페이지 즐겨찾기