惯性滑动切换(Fling操作)

效果图
重写LinearLayoutManager类,配合v7包中的PagerSnapHelper 达成效果

FlingLayoutManager:

/*** Synopsis     ${SYNOPSIS}* Author		Mosr* Version		${VERSION}* Create 	    2018.08.28 15:52* Email  		intimatestranger@sina.cn*/
public class FlingLayoutManager extends LinearLayoutManager implements RecyclerView.OnChildAttachStateChangeListener {private OnViewPagerListener mOnViewPagerListener;private PagerSnapHelper mPagerSnapHelper;private int mDrift;//位移,判断移动方向public FlingLayoutManager setmOnViewPagerListener(OnViewPagerListener mOnViewPagerListener) {this.mOnViewPagerListener = mOnViewPagerListener;return this;}public FlingLayoutManager(Context context, int orientation, boolean reverseLayout) {super(context, orientation, reverseLayout);mPagerSnapHelper = new PagerSnapHelper();}@Overridepublic void onAttachedToWindow(RecyclerView view) {view.addOnChildAttachStateChangeListener(this);mPagerSnapHelper.attachToRecyclerView(view);super.onAttachedToWindow(view);}@Overridepublic void onDetachedFromWindow(RecyclerView view, RecyclerView.Recycler recycler) {super.onDetachedFromWindow(view, recycler);}/*** @param dy       下 负*                 上 正* @param recycler* @param state** @return*/@Overridepublic int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {this.mDrift = dy;return super.scrollVerticallyBy(dy, recycler, state);}@Overridepublic boolean canScrollVertically() {
//        return super.canScrollVertically();return true;}@Overridepublic void onChildViewAttachedToWindow(View view) {if (this.mOnViewPagerListener != null) {mOnViewPagerListener.onPageSelected(getPosition(view), mDrift > 0);}}@Overridepublic void onChildViewDetachedFromWindow(View view) {if (this.mOnViewPagerListener != null) {mOnViewPagerListener.onPageRelease(getPosition(view), mDrift > 0);}}@Overridepublic void onScrollStateChanged(int state) {switch (state) {case RecyclerView.SCROLL_STATE_IDLE:if (this.mOnViewPagerListener != null) {View mView = mPagerSnapHelper != null ? mPagerSnapHelper.findSnapView(this) : null;if (mView != null) {mOnViewPagerListener.onPageSelected(getPosition(mView), true);}}break;}super.onScrollStateChanged(state);}
}

帖子地址
CSDN下载
Git托管地址


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部