RecyclerView:PagerSnapHelper让你体验视频上下无缝滑动播放

前言

RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类,用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。例如列表横向,纵向滑动时,很多时候不会让列表滑到任意位置,而是会有一定的规则限制,这时候就可以通过SnapHelper来定义对齐规则了。

SnapHelper是一个抽象类,官方提供了一个LinearSnapHelper的子类,可以让RecyclerView滚动停止时相应的Item停留中间位置。25.1.0版本中官方又提供了一个PagerSnapHelper的子类,可以使RecyclerView像ViewPager一样的效果,一次只能滑一页,而且居中显示。


ListView/RecyclerView滚动事件监听

 

1.onScrollStateChanged 用于监听ListView/RecyclerView滑动状态的变化

2.onScroll 用于监听ListView/RecyclerView屏幕滚动

3.scrollVerticallyBy用于监听ListView/RecyclerView屏幕滚动方向

 

   onScrollStateChanged

 /**
     * OnScrollListener.SCROLL_STATE_FLING; //屏幕处于甩动状态
      OnScrollListener.SCROLL_STATE_IDLE; //停止滑动状态
     OnScrollListener.SCROLL_STATE_TOUCH_SCROLL;// 手指接触状态
     * @param state
     */
    @Override
    public void onScrollStateChanged(int state) {
        switch (state) {
            case RecyclerView.SCROLL_STATE_IDLE:



                break;
        }
        super.onScrollStateChanged(state);
    }

 scrollVerticallyBy:y轴滚动

 @Override
    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
        this.mDrift = dy;
        return super.scrollVerticallyBy(dy, recycler, state);
    }
mDrift判断移动方向:mDrift>0向上移动,mDrift<0向下移动。

OnChildAttachStateChangeListener

 

实现这个接口重写onChildViewAttachedToWindow方法,在ListView/RecyclerView中,当Item添加进来了 调用这个方法。

onChildViewDetachedFromWindow Item退出调用这个方法。

 

 

直接看效果:

 

x向上滑动

up

 

向下滑动

down

 

 

代码:https://github.com/yangxiansheng123/FFmpegPlayVideo

 

可参考:

1.https://www.jianshu.com/p/e54db232df62

2.https://blog.csdn.net/xx326664162/article/details/49617013

3..GSYVideoPlayer : https://github.com/CarGuo/GSYVideoPlayer

介绍:一个基于RecyclerView实现的ViewPager,支持类似于gallary的fling操作。点击上面"下载源码" 按钮,可以下载完整的demo。其中recyclerview是android-support中的依赖项目,RecyclerViewPager是主项目。运行效果:使用说明:继承自 RecyclerView.自定义 fling factor.自定义 paging trigger.支持 水平个垂直方向.支持 FragmentViewPager (api 12 )gradlecompile('com.lsjwzh:recyclerviewpager:1.0.2')xml:java:final RecyclerViewPager mRecyclerView = (RecyclerViewPager) this.findViewById(R.id.recyclerViewPager); LinearLayoutManager layout = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false);//LinearLayoutManager.HORIZONTAL 设置水平滚动 mRecyclerView.setLayoutManager(layout); //set adapter mRecyclerView.setAdapter(new MyRecyclerAdapter());static class MyRecyclerAdapter extends RecyclerView.Adapter { private List items = new ArrayList(); public MyRecyclerAdapter(){ //创建4个页面 for(int i = 1; i<5; i ){ items.add("页面" i); } } public static class ViewHolder extends RecyclerView.ViewHolder{ public ViewHolder(View itemView) { super(itemView); } } @Override public int getItemCount() { // TODO Auto-generated method stub return items.size(); } @Override public void onBindViewHolder(ViewHolder holder, int position) { String item = items.get(position); TextView msgTv = (TextView)holder.itemView.findViewById(R.id.msg); msgTv.setText(item); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if(inflate == null) inflate = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = (LinearLayout)(inflate.inflate(R.layout.item, null)); return new 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值