123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- package com.edufound.reader.videoutil;
- import android.content.Context;
- import android.view.View;
- import com.orhanobut.logger.Logger;
- import androidx.recyclerview.widget.LinearLayoutManager;
- import androidx.recyclerview.widget.PagerSnapHelper;
- import androidx.recyclerview.widget.RecyclerView;
- public class ViewPagerLayoutManager extends LinearLayoutManager {
- private static final String TAG = "ViewPagerLayoutManager";
- private PagerSnapHelper mPagerSnapHelper;
- private OnViewPagerListener mOnViewPagerListener;
- private RecyclerView mRecyclerView;
- private int mDrift;//位移,用来判断移动方向
- private RecyclerView.OnChildAttachStateChangeListener mChildAttachStateChangeListener = new RecyclerView.OnChildAttachStateChangeListener() {
- @Override
- public void onChildViewAttachedToWindow(View view) {
- if (mOnViewPagerListener != null && getChildCount() == 1) {
- mOnViewPagerListener.onInitComplete();
- }
- }
- @Override
- public void onChildViewDetachedFromWindow(View view) {
- if (mDrift >= 0) {
- if (mOnViewPagerListener != null)
- mOnViewPagerListener.onPageRelease(true, getPosition(view));
- } else {
- if (mOnViewPagerListener != null)
- mOnViewPagerListener.onPageRelease(false, getPosition(view));
- }
- mOnViewPagerListener.onChildViewDetachedFromWindow(view);
- }
- };
- public ViewPagerLayoutManager(Context context, int orientation) {
- super(context, orientation, false);
- init();
- }
- public ViewPagerLayoutManager(Context context, int orientation, boolean reverseLayout) {
- super(context, orientation, reverseLayout);
- init();
- }
- private void init() {
- mPagerSnapHelper = new PagerSnapHelper();
- }
- @Override
- public void onAttachedToWindow(RecyclerView view) {
- super.onAttachedToWindow(view);
- mPagerSnapHelper.attachToRecyclerView(view);
- this.mRecyclerView = view;
- mRecyclerView.addOnChildAttachStateChangeListener(mChildAttachStateChangeListener);
- }
- @Override
- public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
- super.onLayoutChildren(recycler, state);
- }
- @Override
- public boolean canScrollHorizontally() {
- return false;
- }
- /**
- * 滑动状态的改变
- * 缓慢拖拽-> SCROLL_STATE_DRAGGING
- * 快速滚动-> SCROLL_STATE_SETTLING
- * 空闲状态-> SCROLL_STATE_IDLE
- *
- * @param state
- */
- @Override
- public void onScrollStateChanged(int state) {
- switch (state) {
- case RecyclerView.SCROLL_STATE_IDLE:
- View viewIdle = mPagerSnapHelper.findSnapView(this);
- if (getChildCount() > 1) {
- //有多余的
- if (mDrift >= 0) {
- removeViewAt(1);
- } else {
- removeViewAt(0);
- }
- }
- if (viewIdle != null) {
- int positionIdle = getPosition(viewIdle);
- if (mOnViewPagerListener != null && getChildCount() == 1) {
- mOnViewPagerListener.onPageSelected(positionIdle, positionIdle == getItemCount() - 1);
- }
- }
- break;
- }
- }
- /**
- * 监听竖直方向的相对偏移量
- *
- * @param dy
- * @param recycler
- * @param state
- * @return
- */
- @Override
- public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
- this.mDrift = dy;
- return super.scrollVerticallyBy(dy, recycler, state);
- }
- /**
- * 监听水平方向的相对偏移量
- *
- * @param dx
- * @param recycler
- * @param state
- * @return
- */
- @Override
- public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
- this.mDrift = dx;
- return super.scrollHorizontallyBy(dx, recycler, state);
- // return 0;
- }
- /**
- * 设置监听
- *
- * @param listener
- */
- public void setOnViewPagerListener(OnViewPagerListener listener) {
- this.mOnViewPagerListener = listener;
- }
- }
|