Android仿抖音上下滑动布局
抖音上下滑动,监听播放,自动吸顶,吸底效果,供大家参考,具体内容如下
使用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); } }); }
代码:MyUiDemo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
上一篇:Windows实现Flutter环境搭建及配置这一篇就够了
栏 目:Android
本文标题:Android仿抖音上下滑动布局
本文地址:https://www.xiuzhanwang.com/a1/Android/9014.html
您可能感兴趣的文章
- 01-10Android自定义View之绘制圆形头像功能
- 01-10Android实现双击返回键退出应用实现方法详解
- 01-10android实现记住用户名和密码以及自动登录
- 01-10android实现简单计算器功能
- 01-10Android 友盟第三方登录与分享的实现代码
- 01-10android实现指纹识别功能
- 01-10Emoji表情在Android JNI中的兼容性问题详解
- 01-10Android实现圆形渐变加载进度条
- 01-10android开发环境中SDK文件夹下的所需内容详解
- 01-10android异步消息机制 源码层面彻底解析(1)
阅读排行
本栏相关
- 01-10Android自定义View之绘制圆形头像功能
- 01-10Android实现双击返回键退出应用实现方
- 01-10android实现简单计算器功能
- 01-10android实现记住用户名和密码以及自动
- 01-10C++自定义API函数实现大数相乘算法
- 01-10Android 友盟第三方登录与分享的实现代
- 01-10android实现指纹识别功能
- 01-10如何给Flutter界面切换实现点特效
- 01-10Android实现圆形渐变加载进度条
- 01-10Emoji表情在Android JNI中的兼容性问题详
随机阅读
- 01-10C#中split用法实例总结
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11ajax实现页面的局部加载
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法