LinearSnapHelper , 滑动停靠效果, 当滑动停止的时候,自动调整item,左对齐,或者靠中对齐
来源:互联网 发布:react.js项目 编辑:程序博客网 时间:2024/05/21 14:54
这个需求来自于朋友公司,要一个可以滑动的,停止后能够调整位置的item 条目,我网上搜集,查找了很久,突然才发现原来
RecyclerView 自己提供了相关的接口SnapHelper 和他的实现类LinearSnapHelper, 这个类是可以做到左边对齐,中间对齐,在网上搜集了一个叫做StartSnapHelper,贴上代码,以做记录public class StartSnapHelper extends LinearSnapHelper { private OrientationHelper mVerticalHelper, mHorizontalHelper; public StartSnapHelper() { } @Override public void attachToRecyclerView(@Nullable RecyclerView recyclerView) throws IllegalStateException { super.attachToRecyclerView(recyclerView); } @Override public int[] calculateDistanceToFinalSnap(@NonNull RecyclerView.LayoutManager layoutManager, @NonNull View targetView) { int[] out = new int[2]; if (layoutManager.canScrollHorizontally()) { out[0] = distanceToStart(targetView, getHorizontalHelper(layoutManager)); } else { out[0] = 0; } if (layoutManager.canScrollVertically()) { out[1] = distanceToStart(targetView, getVerticalHelper(layoutManager)); } else { out[1] = 0; } return out; } @Override public View findSnapView(RecyclerView.LayoutManager layoutManager) { if (layoutManager instanceof LinearLayoutManager) { if (layoutManager.canScrollHorizontally()) { return getStartView(layoutManager, getHorizontalHelper(layoutManager)); } else { return getStartView(layoutManager, getVerticalHelper(layoutManager)); } } return super.findSnapView(layoutManager); } private int distanceToStart(View targetView, OrientationHelper helper) { return helper.getDecoratedStart(targetView) - helper.getStartAfterPadding(); } private View getStartView(RecyclerView.LayoutManager layoutManager, OrientationHelper helper) { if (layoutManager instanceof LinearLayoutManager) { int firstChild = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); boolean isLastItem = ((LinearLayoutManager) layoutManager) .findLastCompletelyVisibleItemPosition() == layoutManager.getItemCount() - 1; if (firstChild == RecyclerView.NO_POSITION || isLastItem) { return null; } View child = layoutManager.findViewByPosition(firstChild); if (helper.getDecoratedEnd(child) >= helper.getDecoratedMeasurement(child) / 2 && helper.getDecoratedEnd(child) > 0) { return child; } else { if (((LinearLayoutManager) layoutManager).findLastCompletelyVisibleItemPosition() == layoutManager.getItemCount() - 1) { return null; } else { return layoutManager.findViewByPosition(firstChild + 1); } } } return super.findSnapView(layoutManager); } private OrientationHelper getVerticalHelper(RecyclerView.LayoutManager layoutManager) { if (mVerticalHelper == null) { mVerticalHelper = OrientationHelper.createVerticalHelper(layoutManager); } return mVerticalHelper; } private OrientationHelper getHorizontalHelper(RecyclerView.LayoutManager layoutManager) { if (mHorizontalHelper == null) { mHorizontalHelper = OrientationHelper.createHorizontalHelper(layoutManager); } return mHorizontalHelper; }}调用方法很简单,如下 SnapHelper snapHelperStart = new StartSnapHelper(); snapHelperStart.attachToRecyclerView(mRecyclerView);瞎哔哔了那么久,现在贴上最最重要的两个参考文献,感谢大神的博客http://www.cnblogs.com/zhujiabin/p/6117482.htmlhttp://www.th7.cn/Program/Android/201703/1141625.shtml
阅读全文
0 0
- LinearSnapHelper , 滑动停靠效果, 当滑动停止的时候,自动调整item,左对齐,或者靠中对齐
- Android 实现Gallery左对齐,选中Item不滑动效果
- Android 实现Gallery左对齐,选中Item不滑动效果
- CCTableView的滑动对齐
- 当ListView的item为CheckBox,EditText,Spinner的时候处理滑动数据错乱
- 当滑动到顶部和底部时,实现Item的分离效果的ListView
- 滑动删除ListView的Item的效果
- 赵雅智_AndroidUI_listview的item滑动删除效果
- AndroidUI_listview的item滑动删除效果
- Android--ListView的item水平滑动效果
- ext toolbar 里的button默认都是靠左对齐的,设置靠右
- ios中UISearchBar的placeHolder左对齐
- android ListView滑动首字母顶部停靠效果
- android ListView滑动首字母顶部停靠效果
- 滑动的导航,背景图片或者边框滑动效果
- 自定义可左滑动删除item的listview
- Android_滑动的时候头部变化效果
- Android_滑动的时候头部变化效果
- 使用极光/友盟推送,APP进程杀死后为什么收不到推送
- Spring之@Value 注解获取properties值(Spring 3的@value简化配置文件的读取)
- windows8安装msi软件提示2503错误的解决办法
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断
- Spring MVC 实现文件的上传和下载
- LinearSnapHelper , 滑动停靠效果, 当滑动停止的时候,自动调整item,左对齐,或者靠中对齐
- Vue2.0组件实现动态搜索引擎(二)
- 在507干活的第4天(下)
- 网络基础-MAC和IP的区别
- Git 使用记录
- 论文笔记-Temporal segment network:towards good practices for deep action recognition
- Android 动态权限申请原则 Best Practices for App Permissions
- Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
- BZOJ 2005 NOI2010 能量采集 莫比乌斯反演