RecyclerView 滑动时,添加indicator,并实现联动

xiaoxiao2021-02-28  98

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; } }

转载请注明原文地址: https://www.6miu.com/read-79722.html

最新回复(0)