RecyclerView는 ViewPager 페이지 넘기기 OnPageChangeListener 감청 기능을 구현합니다.

4774 단어 Android
전재는 다음과 같이 명시해 주십시오.https://blog.csdn.net/u012854870/article/details/84984066
우리는 ViewPager를 사용할 때 다소 구덩이에 부딪히기 때문에 오늘은 자세히 말하지 않겠다.
 
일단 저희가 SnapHelper에 대해서 소개를 해드릴게요.
Google은 안드로이드 24.2.0의 Support 패키지에 SnapHelper를 추가했습니다. SnapHelper는 RecyclerView를 확장하여 RecyclerView와 결합하여 사용하면 멋진 효과를 쉽게 낼 수 있습니다.SnapHelper의 기능은 무엇일까요?SnapHelper는 RecyclerView의 정렬 방식을 지원하기 위해 설계되었습니다. 즉, RecyclerView의 TargetView의 지정한 점이나 용기의 픽셀을 계산하여 정렬합니다.
다음은 SnapHelper의 두 가지 부류, Linear SnapHelper와 Pager SnapHelper를 소개합니다. 저희가 ViewPaper를 실현하려면 그 중 하나를 사용해야 합니다.
(1) LinearSnapHelperLinearSnapHelper는 현재 Item을 가운데로 표시하고 ViewPager 효과와 유사하지만 빠르게 미끄러질 수 있다(여러 페이지 미끄러짐).코드는 다음과 같다.
 LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
 // SnapHelper attach  RecyclrView
 linearSnapHelper.attachToRecyclerView(recyclerView);

2) Pager SnapHelper(Android 25.1.0 support 패키지에 가입)PagerSnapHelper의 전시 효과는 LineSnapHelper와 동일하며, Pager SnapHelper는 한 번에 한 페이지만 미끄러질 수 있도록 제한할 뿐 빠르게 미끄러질 수 없다.코드는 다음과 같습니다.
PagerSnapHelper pagerSnapHelper = new PagerSnapHelper();
// SnapHelper attach  RecyclrView
pagerSnapHelper.attachToRecyclerView(recyclerView);

이로써 우리는 자신의 수요에 따라 적합한 SnapHelper를 선택하여 ViewPager 페이지 넘기 효과를 실현할 수 있다.
다음으로 오늘의 주제 RecyclerView로 넘어가서 페이지 넘기기 수신 기능 추가
ViewPager 자체가 OnPageChangeListener를 실현시켰습니다. 저희는 추가하기만 하면 됩니다. 저희가 RecycleView를 사용하여 실현한 ViewPage 효과 자체는 OnPageChangeListener 이벤트가 실현되지 않았기 때문에 RecyclerView를 이용할 수 있습니다.OnScrollListener가 이 기능을 수행합니다.코드는 다음과 같습니다.
/**
 * Created by pangli on 2018/12/13 9:43
 *   :RecyclerView    ViewPager PageChangeListener  
 */
public class RecyclerViewPageChangeListenerHelper extends RecyclerView.OnScrollListener {
    private SnapHelper snapHelper;
    private OnPageChangeListener onPageChangeListener;
    private int oldPosition = -1;//    Position    

    public RecyclerViewPageChangeListenerHelper(SnapHelper snapHelper, OnPageChangeListener onPageChangeListener) {
        this.snapHelper = snapHelper;
        this.onPageChangeListener = onPageChangeListener;
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        if (onPageChangeListener != null) {
            onPageChangeListener.onScrolled(recyclerView, dx, dy);
        }
    }

    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        int position = 0;
        RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
        //       itemView
        View view = snapHelper.findSnapView(layoutManager);
        if (view != null) {
            //  itemView position
            position = layoutManager.getPosition(view);
        }
        if (onPageChangeListener != null) {
            onPageChangeListener.onScrollStateChanged(recyclerView, newState);
            //newState == RecyclerView.SCROLL_STATE_IDLE                     
            if (newState == RecyclerView.SCROLL_STATE_IDLE && oldPosition != position) {
                oldPosition = position;
                onPageChangeListener.onPageSelected(position);
            }
        }
    }

    public interface OnPageChangeListener {
        void onScrollStateChanged(RecyclerView recyclerView, int newState);

        void onScrolled(RecyclerView recyclerView, int dx, int dy);

        void onPageSelected(int position);
    }

}
        RecyclerView OnPageChangeListener  。

사용:
        LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
        linearSnapHelper.attachToRecyclerView(recyclerView);
        recyclerView.postDelayed(new Runnable() {
            @Override
            public void run() {
                recyclerView.smoothScrollToPosition(4);
            }
        }, 5000);
        recyclerView.addOnScrollListener(new RecyclerViewPageChangeListenerHelper(linearSnapHelper,
                new RecyclerViewPageChangeListenerHelper.OnPageChangeListener() {


                    @Override
                    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

                    }

                    @Override
                    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

                    }

                    @Override
                    public void onPageSelected(int position) {
                        ToastUtils.showToastShort(mContext, "  " + position);
                        Log.e("Zorro", "  " + position);
                    }
                }));

좋은 웹페이지 즐겨찾기