Android tabLayout + recyclerView 닻 포 지 셔 닝 실현
tablayout
+ scrollView
가 실현 하 는 닻 포 지 셔 닝 을 소개 했다. 오늘 우 리 는 tablayout
+ recyclerView
를 사용한다. 같은 효 과 를 낼 수 있 습 니 다. 효과 그림:사고의 방향 을 실현 하 다.
실 현 된 사고방식 은 이전 문장 과 일치한다. 1. 감청
recyclerView
이 미 끄 러 진 위치, tablayout
대응 하 는 탭 으로 전환 2. tablayout
각 탭 클릭, recyclerView
대응 구역 으로 미 끄 러 짐데이터 시 뮬 레이 션
데이터 시 뮬 레이 션 은 이전 글 의
AnchorView
을 recyclerView
의 모든 글자 view 로 사용 하 는 동시에 recyclerView
의 마지막 키 view 의 높이 를 수정 하여 화면 을 가득 채 웁 니 다.private LinearLayoutManager manager;
private String[] tabTxt = {
" ", " ", " ", " ", " ", " "};
// recyclerView ,true- ,false- , tablayout
private boolean isRecyclerScroll;
// , tablayout
private int lastPos;
// recyclerView
private boolean canScroll;
private int scrollToPosition;
//tablayout
for (int i = 0; i if (position == tabTxt.length - 1) {
if (holder.anchorView.getHeight()
recyclerView 슬라이딩 포 지 셔 닝
recyclerView
미끄럼 으로 인 한 addOnScrollListener
의 onScrolled
감청 첫 번 째 보 이 는 view 의 위 치 를 직접 tablayout
해당 위치 로 지정 합 니 다.recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// recyclerView ,isRecyclerScroll true
if (event.getAction() == MotionEvent.ACTION_DOWN) {
isRecyclerScroll = true;
}
return false;
}
});
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (isRecyclerScroll) {
// view , tablayou
int position = manager.findFirstVisibleItemPosition();
if (lastPos != position) {
tabLayout.setScrollPosition(position, 0, true);
}
lastPos = position;
}
}
});
tablayout 위치 전환
tablayout
을 클릭 하여 전환 합 니 다. recyclerView
해당 위치 로 미 끄 러 져 야 합 니 다. 여 기 는 점프 위치 에 따라 해당 하 는 미끄럼 을 해 야 합 니 다.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
// , recyclerView ,isRecyclerScroll false
int pos = tab.getPosition();
isRecyclerScroll = false;
moveToPosition(manager, recyclerView, pos);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
public void moveToPosition(LinearLayoutManager manager, RecyclerView mRecyclerView, int position) {
// view
int firstItem = manager.findFirstVisibleItemPosition();
// view
int lastItem = manager.findLastVisibleItemPosition();
if (position <= firstItem) {
// firstItem ( ), smoothScrollToPosition ,
mRecyclerView.smoothScrollToPosition(position);
} else if (position <= lastItem) {
// firstItem ,lastItem ( ),smoothScrollBy
int top = mRecyclerView.getChildAt(position - firstItem).getTop();
mRecyclerView.smoothScrollBy(0, top);
} else {
// lastItem , smoothScrollToPosition
// onScrollStateChanged moveToPosition ,
mRecyclerView.smoothScrollToPosition(position);
scrollToPosition = position;
canScroll = true;
}
}
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (canScroll) {
canScroll = false;
moveToPosition(manager, recyclerView, scrollToPosition);
}
}
});
이로써 닻 점 포 지 셔 닝 을 실현 하 는 두 가지 방법 은 여기까지 소개 되 며 독자 들 이 실제 프로젝트 에서 사용 하 는 데 도움 이 되 기 를 바란다. 코드 는 이전 글 과 같은 git 주소 에 있 습 니 다.
자세 한 코드 는 만 나 서 개인 적 으로 얘 기해 도 돼 요.
다음으로 전송:https://juejin.im/post/5c25ce4fe51d450669777c71
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
git 버 전 관리 에서 파일 제거 andorid 버 전git rm -r -n --cached */bin git rm *~ (현재 디 렉 터 리 에서 "~"로 끝 나 는 파일 만 삭제 합 니 다) 별표 * 이전의 역 슬 래 쉬\, 왜냐하면 Git 은 파일 모드 확...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.