Android RecyclerView 는 부유 흡 정,구분자,최종 알림 효 과 를 실현 합 니 다.
3507 단어 recyclerview부유 흡 정구분자제시 하 다.
1.상단 흡착 효과 도
2.상단 불 흡착 효과 도
3.한 화면 미 만 효과
4.핵심 실현 점
1.왜 ItemDecoration 을 통 해'원리'를 실현 할 수 있 습 니까?
① getItemOffsets()방법 을 통 해 현재 템 플 릿 view 의 left,top,right,bottom 사 이 드 를 가 져 옵 니 다.이 남 겨 진 거 리 는 보조 적 인 ui 를 그 리 는 데 사 용 됩 니 다.
// RecyclerView measure child
public void measureChild(@NonNull View child, int widthUsed, int heightUsed) {
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
// getItemOffsets()
final Rect insets = mRecyclerView.getItemDecorInsetsForChild(child);
widthUsed += insets.left + insets.right;
heightUsed += insets.top + insets.bottom;
final int widthSpec = getChildMeasureSpec(getWidth(), getWidthMode(),
getPaddingLeft() + getPaddingRight() + widthUsed, lp.width,
canScrollHorizontally());
final int heightSpec = getChildMeasureSpec(getHeight(), getHeightMode(),
getPaddingTop() + getPaddingBottom() + heightUsed, lp.height,
canScrollVertically());
if (shouldMeasureChild(child, widthSpec, heightSpec, lp)) {
child.measure(widthSpec, heightSpec);
}
}
② onDrawOver()를 통 해 부유 보 기 를 그립 니 다.ui 는 모든 하위 보기 위 에 있 습 니 다.
@Override
public void draw(Canvas c) {
super.draw(c);
// RecyclerView onDrawOver()
final int count = mItemDecorations.size();
for (int i = 0; i < count; i++) {
mItemDecorations.get(i).onDrawOver(c, this, mState);
}
}
③ onDraw()방법 으로 분할 선 등 보 기 를 그립 니 다.
public void onDraw(Canvas c) {
super.onDraw(c);
// onDraw() , RecyclerView view
final int count = mItemDecorations.size();
for (int i = 0; i < count; i++) {
mItemDecorations.get(i).onDraw(c, this, mState);
}
}
2.'도대체 힌트'그리 기getItemOffsets()에서 하위 보기 의 너비 와 높이 를 가 져 올 수 없 기 때문에 measure 가 없습니다.getItemOffsets()에 높이 를 추가 한 후 한 화면 에 만족 하지 않 으 면 onDraw()방법 에서 수정 해 야 합 니 다.수정 방식 은 다음 과 같 습 니 다.
mDecorInsets 속성 을 반사 하여 getItemOffsets()방법 에 설 정 된 값 을 초기 화 합 니 다.
private void setDecorInsetsBottom(RecyclerView.LayoutParams param, int bottom) {
try {
// RecyclerView.LayoutParams mDecorInsets
Field filed = RecyclerView.LayoutParams.class.getDeclaredField("mDecorInsets");
filed.setAccessible(true);
Rect decorRect = (Rect) filed.get(param);
decorRect.bottom = bottom;
} catch (Exception e) {
}
}
총결산위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 리 클 러 뷰 입 니 다.부유 흡 정,분리 선,최종 제시 효 과 를 실현 하고 여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 에서 recyclerView 아래쪽 에 투명 그 라 데 이 션 효과 추가상단 그림자 가 존재 하고 디 버 깅 시스템 에 상하 그림자 장면 을 만 들 었 는데 setSize 를 호출 하지 않 고 그림 자 를 그 렸 습 니 다.그 러 다 한참 을 뒤 척 였 지만 이 그림자 가 리 콜 러 뷰...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.