<
>

Android简单实现无限滚动自动滚动的ViewPager

2019-12-16 21:43:44 来源:易采站长站 作者:丽君

经常我们会在应用中看到一个可以自动滚动,并且无限滚动的一个ViewPager,百度谷歌上面也有很多关于这方面的教程,但是感觉都略显麻烦,而且封装的都不是很彻底。所以试着封装一个比较好用的ViewPager

效果如下:

android,viewpager,滚动

简单的说一下实现思路,要实现无限滚动的话就要在PagerAdapter上面做一些手脚,在PagerAdapter的getCount的函数的返回值设置成Integer.MXA_VALUE就可以实现向右无限滚动,但是要实现向左无限滚动呢?就是一开始的时候setCurrentItem的时候设置一个非常大的值(大到你向左滚动了一万年还是有东西)


@Override 
    public int getCount() { 
      return Integer.MAX_VALUE; 
    } 

mPager.setCurrentItem(10000 * mDatas.size());//一开始设置成这样的话就可以向左无限滚动了 

然后另外一个就是底部的游标了:

android,viewpager,滚动

底部的游标是用一个自定义视图:无非就是画一个背景,然后在画一个高亮的游标


/** 
  * 指示游标 
  */ 
  private class TipView extends View { 
    private int mPadding; 
    private int mCount; 
    private int mCurPos; 
    private Paint mNorPaint;//未被选中的颜色 
    private Paint mSelPaint;//被选中的颜色 白色 
    private int mHeight; 
    public TipView(Context context, int count) { 
      super(context); 
      mNorPaint = new Paint(); 
      mNorPaint.setAntiAlias(true); 
      int selHeight = ShowUtils.dip2px(2); 
      int norHeight = ShowUtils.dip2px(1); 
      mHeight = ShowUtils.dip2px(2); 
      mNorPaint.setStrokeWidth(norHeight); 
      mNorPaint.setColor(Color.argb(80, 255, 255, 255)); 
      mSelPaint = new Paint(); 
      mSelPaint.setAntiAlias(true); 
      mSelPaint.setStrokeWidth(selHeight); 
      mSelPaint.setColor(Color.WHITE); 
      mCount = count; 
      mPadding = ShowUtils.dip2px(0); 
    } 
    @Override 
    protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      int ow = (getWidth()-2 * mPadding)/ mCount; 
      int y = getHeight() / 2; 
      canvas.drawLine(mPadding, y, mCurPos * ow + mPadding, y, mNorPaint); 
      canvas.drawLine(mCurPos * ow + mPadding, y, (mCurPos + 1) * ow + mPadding, y, mSelPaint); 
      canvas.drawLine((mCurPos + 1) * ow + mPadding, y, getWidth() - mPadding, y, mNorPaint); 
    } 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      ViewGroup.LayoutParams vp = getLayoutParams(); 
      vp.width = ViewGroup.LayoutParams.MATCH_PARENT; 
      vp.height = mHeight; 
      super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
    public void setCurPostion(int pos) { 
      mCurPos = pos; 
      invalidate(); 
    } 
    public void setCount(int count) { 
      mCount = count; 
    } 
  } 
              
暂时禁止评论

微信扫一扫

易采站长站微信账号