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)
}
...
'Android' 카테고리의 다른 글
[Android] 지난 주 날짜 가지고 오기 (0) | 2021.08.03 |
---|---|
[Android] 앱이 죽은 경우 스플래쉬부터 시작하기 (0) | 2021.07.28 |
[Android] Collapse와 Expand 상태에서 힌트 문자가 다른 TextInputLayout (0) | 2021.02.18 |
[Android] OPEN_DOCUMENT로 가져온 Uri를 Multipart.Part로 만들기(Retrofit2 파일 업로드) (2) | 2020.10.14 |
[Android] SQLiteDatabase 트랜잭션 사용법 (0) | 2020.09.23 |