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
原创粉丝点击