리사이클러뷰의 맨 첫 번째 또는 마지막 요소에서 스크롤(오버스크롤)할 경우 엣지 스크롤 이펙트가 적용되어 있다.
요구사항으로 인해 이펙트를 숨겨야 하는 상황이 있을수도 있다.
검색해보면, 대부분 리사이클러뷰에 android:overScrollMode="never" 속성을 적용하면 해결할 수 있다고 나와있다.
실제로 이 속성만 추가해주면 해당 이펙트는 사라진다.
하지만 오버스크롤 모드가 비활성화 되기 때문에, 오버스크롤이 필요한 경우에는 적용하기에 부적절한 방법이다.
그래서 오버스크롤 모드가 필요한 경우에 아래와 같은 방법으로 해주면 된다.
(주의 - 다른 사이드이펙트가 발생할 수 있음)
Kotlin
recyclerView.edgeEffectFactory = object : RecyclerView.EdgeEffectFactory(){
override fun createEdgeEffect(view : RecyclerView, direction : Int) : EdgeEffect {
return object : EdgeEffect(view.context) {
override fun draw(canvas : Canvas?) : Boolean {
return false
}
}
}
}
Java
recyclerView.setEdgeEffectFactory(new RecyclerView.EdgeEffectFactory(){
@NotNull
@Override
protected EdgeEffect createEdgeEffect(@NotNull RecyclerView view, int direction) {
return new EdgeEffect(view.getContext()) {
public boolean draw(@Nullable Canvas canvas) {
return false;
}
};
}
});
리사이클러뷰에 기본적으로 적용된 edgeEffect를 수정해주는 방법
super.draw 에서는 무엇인가를 그려주는 작업이 있는데(아마도 이펙트를 그리는 부분으로 유추) 그 부분을 모두 빼버리고 리턴 값을 false로 바꿔버린 것
리사이클러뷰 내부에서 draw() 메서드 의 리턴 값이 어떻게 활용되고 있는지는 잘 모르겠지만, 주석을 보면 애니메이션을 위해 drawing 작업이 프레임을 넘어서 계속되어야 할 경우 true를 리턴하라고 되어있다.
Edge Scroll Effect
one-delay.tistory.com/98
'Android > Reference' 카테고리의 다른 글
Floating Action Button (플로팅 액션 버튼) (2) | 2021.01.04 |
---|---|
RecyclerView 화면깜빡임 현상 방지 (ItemAnimator) (0) | 2020.12.16 |
Animation / 애니메이션 구현 (AnimationDrawable) (0) | 2020.12.11 |
Android OnSingleClickListener (중복클릭 방지) (0) | 2020.12.11 |
TitleBar (타이틀바), 상태바 제거 (0) | 2020.10.28 |