본문 바로가기

Android

[Android] isEnabled 로 ScrollView 스크롤 On / Off 시키기

ScrollView의 스크롤 기능을 On / Off 시켜야할 상황이 있어 개발하게 되었습니다.

저 같은 경우엔 MotionLayout의 애니메이션이 끝난 후 Scroll이 가능하도록 개발이 필요했습니다.

추가적인 변수 없이 View의 기본적으로 있는 setEnabled를 사용하고 싶었기 때문에 다음과 같이 개발했습니다.

 

LockableScrollView.kt

class LockableScrollView : ScrollView {
    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)

    override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
        return isEnabled && super.onInterceptTouchEvent(ev)
    }

    override fun onTouchEvent(ev: MotionEvent?): Boolean {
        return isEnabled && super.onTouchEvent(ev)
    }

}

추가적으로 비활성화 했을 때 ChildView들의 Click / Touch도 막고 싶은 경우 추가적으로 다음과 같이 오버라이딩하면 됩니다. 해당 오버라이딩은 스크롤뷰뿐만 아니라 CustomViewGroup 전체에 사용이 가능합니다.

...
    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        return isEnabled && super.dispatchTouchEvent(ev)
    }
...