흡수 Item 의 간단 한 실현 방법 공유
일반적으로 위의 그림 스타일 의 Sticker 에 대해 서 는 Coordinator Layout&AppBarLayout 를 사용 하면 실현 이 라 고 할 수 있 습 니 다.
근 데 밑 에 이런 거 는 요?
나의 실현 사고.
우선 전체 페이지 의 UI 구 조 는 RecyclerView 를 통 해 이 루어 진다.
위 에 있 는 이 스티커 의 실현 은 레이아웃 의 맨 위 에 RecyclerView 에서 흡수 할 Item 과 똑 같은 레이아웃 을 추가 한 것 입 니 다.그리고 RecyclerView 의 스크롤 을 감청 합 니 다.
mPostDetailRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (pageStatus == null || pageStatus.stickerPos == -1) return
val preHolder = recyclerView.findViewHolderForAdapterPosition(pageStatus!!.stickerPos - 1)
val targetHolder = recyclerView.findViewHolderForAdapterPosition(pageStatus!!.stickerPos)
var offset = if (targetHolder != null) { //
-targetHolder.itemView.top
}else{
0
}
if (preHolder != null) {
offset = -1
}
if (offset < 0) {
mPostDetailCommentHeaderSticker.visibility = View.GONE
} else {
mPostDetailCommentHeaderSticker.visibility = View.VISIBLE
}
}
}
위의 page Status.stickerPos 는 Sticker 가 RecyclerView 에 있 는 데이터 의 위치 입 니 다.위의 논 리 는 사실 비교적 복잡 하지만 수 요 를 실현 했다(- -).내 가 설명 할 게.즉,Sticker 가 itemView.top 과 Sticker 에 의존 하 는 이전 itemview 가 나 타 났 는 지 판단 합 니 다.
위의 논 리 는 매우 이상 하지만,확실히 흡수 의 수 요 를 실현 하 였 다.
그러나 뒤의 수요 교체 에서 Sticker ItemView 의 이전 ItemView 는 계속 변화 하기 때문에 위의 코드 에 bug 가 나 타 났 습 니 다...그럼 어떻게 해결 하지?
더 간단 하고 통용 되 는 방법.
마지막 으로 영감 이 떠 올 랐 습 니 다.StickerItemView 의 디 스 플레이 에 대해 저 는 앞의 ItemView 에 의존 하지 않 아 도 됩 니 다.
mPostDetailRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
val currentDataPos = recyclerView.getChildAdapterPosition(recyclerView.getChildAt(0))
if (pageStatus != null && currentDataPos < pageStatus.stickerPos) {
mPostDetailCommentHeaderSticker.visibility = View.GONE
} else {
mPostDetailCommentHeaderSticker.visibility = View.VISIBLE
}
}
})
위의 이 코드 는 bug 를 쉽게 복구 하 였 습 니 다.그리고 그 논 리 는 매우 간단 하고 통용 된다.현재 RecyclerView 에 표 시 된 첫 번 째 항목 의 위치 가 Sticker Item 의 위치 보다 큰 지 판단 하고 크 면 흡 정 Sticker 를 보 여 줍 니 다.
효과:
위 와 같은 실현 은 UI 구조 만 적용 되 는 RecyclerView 의 경우 입 니 다.
PASS:만약 당신 이 이렇게 한다 면 나 를 무시 하 세 요(- -)
더 작은 공유:AdvancedAndroid
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.