일단 내가 만들고 싶은 화면이다.
맨 밑에 recyclerView를 스크롤 시키면 위에 Appbar는 작아지고 editText는 생겼다가 사라졌다가 하고 textView는 고정시키는것.
일단 초기 작업을 해주자.
Manifest을 가서 이렇게 수정해주자 안해주면 못생긴 기본 액션바가 나온다.
CoordinatorLayout은 Jetpack에 속해있는 라이브러리이기 때문에 사용하기 위해서는 프로젝트에 종속성 추가를 해줘야 한다.gradle가서 추가해주자.
CoordinatorLayout이 뭐냐?
상호작용이라는 말의 뜻은 리사이클러뷰를 위로 스크롤하면 AppBar가 사라지고, 아래로 스크롤하면 AppBar가 나타나는 효과를 줄때 사용한다.
이미지가 줄어드는 효과를 주기위해 AppBar에 CollapsingToolbarLayout을 썼다.
<CoordinatorLayout> << CollapsingToolbarLayout을 사용하기 위해서는 꼭 CoordinatorLayout을 사용해야함
<AppBarLayout> << appBarLayout 안에 CollapsingToolbarLayout을 넣음
<CollapsingToolbarLayout> << 스크롤시 접히거나 나타날 부분을 넣는 layout
<ImageView/> << 접히거나 나타날 이미지
<Toolbar/> << 접혔을 때에도 남아있을 툴바
</CollapsingToolbarLayout>
</AppBarLayout>
<View/> << 스크롤할 뷰 (NestedScrollView나, RecyclerView도 가능)
</CoordinatorLayout>
나는 스크롤할 뷰쪽에 ConstraintLayout으로 감싸고 EditText와 textView,RecyclerView를 넣어줬다.
EditText는 스크롤 시 사라져야하는데 코드상에서 처리해주었다.
ConstraintLayout에 behavior를 설정해줬는데
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
-> Appbar에 스크롤상태를 알려주겠다.라고 이해하면 된다.
이제 CollapsingToolbarLayout을 설정해주면 되는데
스크롤이 올라가도 이미지가 아예 사라지지 않게 하기 위해서 Toolbar를 만들어줘야한다.
app:layout_collapseMode="pin"
이렇게 설정하면 Toolbar만큼의 사이즈는 스크롤이 되어도 고정된다.
이제 Behavior를 받는 쪽을 설정해주자. flag의 속성값에 맞춰 사용하면 된다.
app:layout_scrollFlags="scroll|exitUntilCollapsed"
이 뷰가 화면에서 사라질 수 있음을 나타낸다. 이 값이 설정되지 않으면 이 뷰는 화면 위쪽에
항상 남아 있다.
scroll 옵션과 같이 사용될 때 위쪽으로 스크롤하는 경우는 사라지고 아래쪽으로 스크롤하는
경우는 다시 나타난다.
enterAlways와 유사하지만 아래쪽으로 스크롤하는 경우만 다르다. 즉, 아래쪽으로 스크롤할 때
스크롤되는 리스트의 끝에 도달했을 때만 이 뷰가 다시 나타난다. 만일 minHeight 속성을 설정
하면 그 값에 도달했을 때만 이 뷰가 다시 나타난다. 이 옵션은 enterAlways와 scroll 모두를
같이 사용할 때만 동작한다.
이 값이 설정되면 위쪽으로 스크롤하는 동안 minHeight에 도달할 때까지만 이 뷰가 사라진다.
그리고 스크롤 방향이 변결될 때까지는 minHeight 지점에 남아 있는다.
이제마지막으로 스크롤시 사라졌다가 나타나는 EditText부분을 만들어볼건데 이 부분은 이벤트처리를 시도해봤다.
뭔가 이상하다..
손가락이 뚱뚱해서 스크롤이 위로 올리기만해도 아래로 내리는거랑 같이 인신이 된다.
다른방법을 생각하자.
추후 수정예정
화나네..