Android仿抖音上下滑动布局
2020-03-21 07:18
1516 查看
抖音上下滑动,监听播放,自动吸顶,吸底效果,供大家参考,具体内容如下
使用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
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- Android上下左右滑动,显示底层布局
- 【Android】解决Listview侧滑与上下滑动问题+侧滑通用布局 DragRelativeLayout
- Android上下左右滑动,显示底层布局
- 安卓两页合并到一页滑动显示的布局(安卓上下滑动页面)
- Android 界面滑动实现---Scroller类 从源码和开发文档中学习(让你的布局动起来)
- Android进阶之欢迎滑动页面(页面布局&底部点点)
- Android 自定义View 实现手势监听,左右滑动,上下滑动
- Android手势识别——上下左右滑动、屏幕上下左右中区域处理
- Android笔记--一个上下滑动,还算看的过眼的日期、时间选择控件
- android listview + checkbox 列表上下滑动导致复选框状态丢失解决办法
- Android上下左右手势滑动事件处理
- 协调者布局 实现上下滑动
- Android实现滑动图片(ViewPager)学习之一:布局
- Android 滑动监听RecyclerView线性流+左右划删除+上下移动
- 布局动画Android ScrollView HorizontalScrollView 实现全方向(上下左右)反弹效果
- Android 滑动界面实现---Scroller类别 从源代码和开发文档了解(让你的移动布局)
- Android实现Excel表格,且表格能左右、上下滑动
- android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。
- android事件分发机制(从原理上解决左右滑动很上下滚动的矛盾)
- Android下ListView上下滑动背景变黑