RecyclerView 滑动时,添加indicator,并实现联动
来源:互联网 发布:js 文件base64编码 编辑:程序博客网 时间:2024/06/15 16:54
RecyclerView 滑动时,添加indicator,并实现联动
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //获取第一个可见Item的位置, 4 表示一行最多显示4个Item;indexNum 表示共有多少页数据 int position = manager.findFirstVisibleItemPosition(); if (indexNum > 1) { indicatorIndex = (position / 4) % indexNum; if (position % 4 > 0) { indicatorIndex = indicatorIndex == indexNum ? 0 : indicatorIndex + 1; } mIndicator.onPageScrolled(indicatorIndex, 0.0f, dx); } // firstVisiableChildView 获取第一个Item的View //View firstVisiableChildView = manager.findViewByPosition(position); //int itemWidth = firstVisiableChildView.getWidth(); //活动时的位移 //int result = (position) * itemWidth - firstVisiableChildView.getLeft();});
制作圆形的通用Indicator,此Indicator既可以应用于RecyclerView,也可以应用于ViewPager:
public class SimpleCircleIndicator extends View { Paint circlePaint; private int pageNum; private float scrollPercent = 0f; private int currentPosition; private int gapSize; private float radius; private int colorOn; private int colorOff; public SimpleCircleIndicator(Context context) { super(context); init(); } public SimpleCircleIndicator(Context context, AttributeSet attrs) { super(context, attrs); init(); } public SimpleCircleIndicator(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { radius = CommonUtil.dip2px(3, getContext()); circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); colorOn = Color.WHITE; colorOff = Color.parseColor("#888888"); gapSize = CommonUtil.dip2px(10, getContext()); } public void setSelectDotColor(int colorOn) { this.colorOn = colorOn; } public void setUnSelectDotColor(int colorOff) { this.colorOff = colorOff; } public void onPageScrolled(int position, float percent, int pixels) { scrollPercent = percent; currentPosition = position; invalidate(); } private ViewPager viewPager; public void setViewPager(ViewPager viewPager) { this.viewPager = viewPager; if (null != viewPager) { pageNum = viewPager.getAdapter().getCount(); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (pageNum <= 0) { return; } float left = (getWidth() - (pageNum - 1) * gapSize) * 0.5f; float height = getHeight() * 0.5f; circlePaint.setColor(colorOff); for (int i = 0; i < pageNum; i++) { canvas.drawCircle(left + i * gapSize, height, radius, circlePaint); } circlePaint.setColor(colorOn); canvas.drawCircle(left + currentPosition * gapSize + gapSize * scrollPercent, height, radius, circlePaint); } public void setPageNum(int nums){ pageNum = nums; }}
阅读全文
0 0
- RecyclerView 滑动时,添加indicator,并实现联动
- recyclerview联动滑动 关键代码
- RecyclerView制定位置滑动置顶,并实现头部悬停
- RecyclerView 实现省市区三级联动
- RecyclerView实现双列表联动
- RecyclerView实现双列表联动
- 【Android手势冲突】彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏
- 使用RecyclerView实现滑动添加、滑动删除,以及瀑布流、ListView、GridView的转换
- RecyclerView实现流式布局并添加headerview、footerview
- 自定义ViewPager、HorizontalScrollView、Indicator实现可滑动的头部
- 自定义RecyclerView添加HeaderView,添加FooterView,实现滑动到底部,加载更多
- Android RecyclerView 实现快速滑动
- recyclerview 实现卡片滑动效果
- RecyclerView实现拖动和滑动
- 联动滑动效果及不同Item效果的RecyclerView
- Android导航菜单横向左右滑动并和下方的控件实现联动
- Android导航菜单横向左右滑动并和下方的控件实现联动
- 导航菜单横向左右滑动并和下方的控件实现联动(有效果图)
- 请说说接口和抽象类的区别?
- bootstrap table 修改table内容时设置表头与表格对齐
- (转)JAVA面试中问及HIBERNATE与 MYBATIS的对比
- Java中九大内置对象
- Java中Synchronized的用法
- RecyclerView 滑动时,添加indicator,并实现联动
- java过滤防止sql注入过滤
- 算法复习:数字在排序数组中出现的次数
- [置顶]CentOS7配置FTP服务器增强版~(零基础学会FTP配置)
- MyEclipse 选中属性或方法后 相同的不变色
- 如何用数据仓库管理海量数据?直接访问数据仓库数据时的4个限制
- hdu 2962(二分答案+最短路)
- PHP数组根据数组内的某个单元字段排序
- 深入理解Apache Flink核心技术