抖音上下滑动,监听播放,自动吸顶,吸底效果

使用RecyclerView+PagerSnapHelper实现

public class DouYinLayoutManager extends LinearLayoutManager implements RecyclerView.OnChildAttachStateChangeListener{    //判断是否上滑还是下滑    private int mDrift;    private OnViewPagerListener onViewPagerListener;    //吸顶,吸底    private PagerSnapHelper pagerSnapHelper;    public OnViewPagerListener getOnViewPagerListener() {        return onViewPagerListener;    }    public void setOnViewPagerListener(OnViewPagerListener onViewPagerListener) {        this.onViewPagerListener = onViewPagerListener;    }    public DouYinLayoutManager(Context context) {        super(context);    }    public DouYinLayoutManager(Context context, int orientation, boolean reverseLayout) {        super(context, orientation, reverseLayout);        pagerSnapHelper = new PagerSnapHelper();    }    /**     * 当manager完全添加到recycleview中是会被调用     * @param view     */    @Override    public void onAttachedToWindow(RecyclerView view) {        view.addOnChildAttachStateChangeListener(this);        pagerSnapHelper.attachToRecyclerView(view);        super.onAttachedToWindow(view);    }    @Override    public boolean canScrollVertically() {        return super.canScrollVertically();    }    @Override    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {        mDrift = dy;        return super.scrollVerticallyBy(dy, recycler, state);    }    @Override    public void onChildViewAttachedToWindow(@NonNull View view) {        if (mDrift > 0){            //向上滑            if (onViewPagerListener != null && Math.abs(mDrift) == view.getHeight()){                onViewPagerListener.onPageSelected(false,view);            }        }else {            //向下滑            if (onViewPagerListener != null && Math.abs(mDrift) == view.getHeight()){                onViewPagerListener.onPageSelected(true,view);            }        }    }    @Override    public void onChildViewDetachedFromWindow(@NonNull View view) {        if (mDrift >= 0){            //向上滑            if (onViewPagerListener != null){                onViewPagerListener.onPageRelease(true,view);            }        }else {            //向下滑            if (onViewPagerListener != null){                onViewPagerListener.onPageRelease(false,view);            }        }    }    @Override    public void onScrollStateChanged(int state) {        switch (state){            case RecyclerView.SCROLL_STATE_IDLE:                //当前显示的item                View snapView = pagerSnapHelper.findSnapView(this);                if (onViewPagerListener != null){                    onViewPagerListener.onPageSelected(false,snapView);                }                break;        }        super.onScrollStateChanged(state);    }}

recyclerView.setLayoutManager()即可

recyclerView = findViewById(R.id.recyclerView_dy);        douYinLayoutManager = new DouYinLayoutManager(this, OrientationHelper.VERTICAL,false);        recyclerView.setLayoutManager(douYinLayoutManager);        recyclerView.setAdapter(new MyAdapter());        douYinLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {            @Override            public void onPageRelease(boolean isNest, View position) {                releaseVideo(position);            }            @Override            public void onPageSelected(boolean isButten, View position) {                playVideo(position);            }        });    }

代码

更多相关文章

  1. 获取Android各类系统相关信息的接口实现代码
  2. [置顶] android,在java代码中,如何给textview设置不同的颜色,以及引
  3. Android的xml布局文件代码讲解(TextView控件)
  4. android 监听SDCard安装和卸载的代码片段(测试通过)
  5. android spinner 样式完全自定义[包括RadioButton和RatingBar效
  6. Android实用代码片段
  7. Android利用Timer实现倒计时效果小demo

随机推荐

  1. cocoscreator构建的android工程报错
  2. ADT-abundle-使用过程中不断出现的错误
  3. 关于Android自定义相机进行拍照(小米手机
  4. android: 不需要焦点的TextView跑马灯 Ma
  5. Android XMl写入
  6. android apk源码
  7. Android Webview与Html5交互
  8. 2015.01.16 Android错误集(1)
  9. Android 沉浸式状态栏 +DrawerLayout+Too
  10. Android HandlerThread总结