Android RecyclerView 스크롤 포 지 셔 닝
3455 단어 AndroidRecyclerView포 지 셔 닝
RecyclerView 는 안 드 로 이 드 개발 에서 매우 실 용적 이 고 사용 하기 쉽 지만 실제 개발 에서 저 를 괴 롭 히 는 문제 가 있 습 니 다.바로 포 지 셔 닝 문제 입 니 다.실제 프로젝트 에서 이런 수 요 를 만 날 수 있 습 니 다.RecyclerView 의 특정한 항목(각 항목 의 높이 가 정확 하지 않 음)을 검색 한 다음 에 이 항목 을 포 지 셔 닝 하여 상단 에 표시 합 니 다.RecyclerView 의 기본 이동 방법 으로 는 이 를 실현 할 수 없다.이 블 로 그 는 내 개인 이 어떻게 이 수 요 를 실현 하 는 지 설명 한다.
데모 데모
코드 를 두 드 리 기 전의 사고.
RecyclerView 가 제공 하 는 이동 제어 방법 은 2 가지 입 니 다.
- scrollToPosition(int)
이 방법 은 지정 한 항목 을 표시 하 는 것 입 니 다.바로 당신 이 꼭대기 에 놓 고 싶 은 항목 을 표시 하 는 것 입 니 다.그러나 화면의 어떤 위치 에 있 든 상관 하지 않 습 니 다.그것 이 지금 보이 기만 하면 파업 합 니 다!
- scrollBy(int x,int y)
이 방법 은 스스로 이동 거 리 를 조절 하 는 것 이 고 단 위 는 픽 셀 이 어야 한다.
scrollToPosition 을 사용 할 때 앞 에 있 는 항목 으로 이동 할 때 기본적으로 표시 할 항목 을 위로 올 려 놓 지만 뒤에 있 는 항목 으로 이동 할 때 위치 가 좋 지 않 습 니 다.(기분 을 보 세 요!)보통 마지막 에 표 시 됩 니 다.쓰 신 건 다 아 실 거 예요.
scrollBy 를 사용 할 때 는 높이 나 너 비 를 스스로 계산 해 야 합 니 다.동적 레이아웃 에서 각 스타일 의 높이 가 다 를 수 있 는 상황 에서 스스로 높이 를 계산 하 는 것 은 매우 어렵다.
위 에서 이렇게 많은 쓸데없는 말 을 했 는데 결론 은 이 두 가지 방법 이 문 제 를 잘 해결 하지 못 한 다 는 것 이다.그러나 그들 두 사람 이 결합 하여 사용 할 때 우리 의 문 제 는 많이 해결 되 었 다.
사고방식 은:먼저 scrollToPosition 을 사용 하여 위 에 놓 을 항목 을 먼저 이동 해서 표시 한 다음 에 이 항목 이 위 에서 떨 어 진 거 리 를 계산 하고 scrollBy 로 마지막 100 미 터 를 완성 합 니 다!
키 코드
먼저 몇 번 째 항목 을 꼭대기 에 놓 고 상황 을 구분 하여 처리 해 야 한다.
private void moveToPosition(int n) {
// RecyclerView LayoutManager Position
int firstItem = mLinearLayoutManager.findFirstVisibleItemPosition();
int lastItem = mLinearLayoutManager.findLastVisibleItemPosition();
//
if (n <= firstItem ){
//
mRecyclerView.scrollToPosition(n);
}else if ( n <= lastItem ){
//
int top = mRecyclerView.getChildAt(n - firstItem).getTop();
mRecyclerView.scrollBy(0, top);
}else{
//
mRecyclerView.scrollToPosition(n);
// RecyclerView
move = true;
}
}
RecyclerView 스크롤 감청
class RecyclerViewListener extends RecyclerView.OnScrollListener{
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// ( 100 !)
if (move ){
move = false;
// ,mIndex RecyclerView
int n = mIndex - mLinearLayoutManager.findFirstVisibleItemPosition();
if ( 0 <= n && n < mRecyclerView.getChildCount()){
// RecyclerView
int top = mRecyclerView.getChildAt(n).getTop();
//
mRecyclerView.scrollBy(0, top);
}
}
}
}
데모 다운로드[CSDN]: http://xiazai.jb51.net/201701/yuanma/RecyclerViewLocation(jb51.net).rar
[GitHub]: https://github.com/tyzlmjj/AndroidUI/tree/master/RecyclerViewLocation
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.