Android tabLayout + recyclerView 닻 포 지 셔 닝 실현

5671 단어 이동 개발jsongit.
이전 글 안 드 로 이 드 가 닻 포 지 셔 닝 을 실현 하 는 과정 에서 우 리 는 tablayout + scrollView 가 실현 하 는 닻 포 지 셔 닝 을 소개 했다. 오늘 우 리 는 tablayout + recyclerView 를 사용한다. 같은 효 과 를 낼 수 있 습 니 다.  효과 그림:
사고의 방향 을 실현 하 다.
실 현 된 사고방식 은 이전 문장 과 일치한다.  1. 감청 recyclerView 이 미 끄 러 진 위치, tablayout 대응 하 는 탭 으로 전환  2. tablayout 각 탭 클릭, recyclerView 대응 구역 으로 미 끄 러 짐
데이터 시 뮬 레이 션
데이터 시 뮬 레이 션 은 이전 글 의 AnchorViewrecyclerView 의 모든 글자 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 미끄럼 으로 인 한 addOnScrollListeneronScrolled 감청 첫 번 째 보 이 는 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

좋은 웹페이지 즐겨찾기