title: How to have dots at pager for my Recycler view?
body: <p>I have to assign dots at pager to my Recycler view . I already obtained a rectangular pager, but I need to have circles. How can I modify my source to obtain what I need? I've tried some web solutions but no one works for me, and I know that I can obtain this with ViewPager but I need to have this with RecyclerView in this way.
  This is my java code for rectangular pager :</p>
  
  <pre><code>    public class LinePagerIndicatorDecoration extends RecyclerView.ItemDecoration {
  
  private int colorActive = 0xFFC8C8C8;
  private int colorInactive = 0xFFE0E0E0;
  
      private static final float DP = Resources.getSystem().getDisplayMetrics().density;
  
      /**
       * Height of the space the indicator takes up at the bottom of the view.
       */
      private final int mIndicatorHeight = (int) (DP * 16);
  
      /**
       * Indicator stroke width.
       */
      private final float mIndicatorStrokeWidth = DP * 2;
  
      /**
       * Indicator width.
       */
      private final float mIndicatorItemLength = DP * 16;
      /**
       * Padding between indicators.
       */
      private final float mIndicatorItemPadding = DP * 8;
  
      /**
       * Some more natural animation interpolation
       */
      private final Interpolator mInterpolator = new AccelerateDecelerateInterpolator();
  
      private final Paint mPaint = new Paint();
  
      public LinePagerIndicatorDecoration() {
          mPaint.setStrokeCap(Paint.Cap.ROUND);
          mPaint.setStrokeWidth(mIndicatorStrokeWidth);
          mPaint.setStyle(Paint.Style.STROKE);
          mPaint.setAntiAlias(true);
      }
  
      @Override
      public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
          super.onDrawOver(c, parent, state);
  
          int itemCount = parent.getAdapter().getItemCount();
  
          // center horizontally, calculate width and subtract half from center
          float totalLength = mIndicatorItemLength * itemCount;
          float paddingBetweenItems = Math.max(0, itemCount - 1) * mIndicatorItemPadding;
          float indicatorTotalWidth = totalLength + paddingBetweenItems;
          float indicatorStartX = (parent.getWidth() - indicatorTotalWidth) / 2F;
  
          // center vertically in the allotted space
          float indicatorPosY = parent.getHeight() - mIndicatorHeight / 2F;
  
          drawInactiveIndicators(c, indicatorStartX, indicatorPosY, itemCount);
  
  
          // find active page (which should be highlighted)
          LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager();
          int activePosition = layoutManager.findFirstVisibleItemPosition();
          if (activePosition == RecyclerView.NO_POSITION) {
              return;
          }
  
          // find offset of active page (if the user is scrolling)
          final View activeChild = layoutManager.findViewByPosition(activePosition);
          int left = activeChild.getLeft();
          int width = activeChild.getWidth();
  
          // on swipe the active item will be positioned from [-width, 0]
          // interpolate offset for smooth animation
          float progress = mInterpolator.getInterpolation(left * -1 / (float) width);
  
          drawHighlights(c, indicatorStartX, indicatorPosY, activePosition, progress, itemCount);
      }
  
      private void drawInactiveIndicators(Canvas c, float indicatorStartX, float indicatorPosY, int itemCount) {
          mPaint.setColor(colorInactive);
  
          // width of item indicator including padding
          final float itemWidth = mIndicatorItemLength + mIndicatorItemPadding;
  
          float start = indicatorStartX;
          for (int i = 0; i &lt; itemCount; i++) {
              // draw the line for every item
              c.drawLine(start, indicatorPosY, start + mIndicatorItemLength, indicatorPosY, mPaint);
              start += itemWidth;
          }
      }
  
      private void drawHighlights(Canvas c, float indicatorStartX, float indicatorPosY,
                                  int highlightPosition, float progress, int itemCount) {
          mPaint.setColor(colorActive);
  
          // width of item indicator including padding
          final float itemWidth = mIndicatorItemLength + mIndicatorItemPadding;
  
          if (progress == 0F) {
              // no swipe, draw a normal indicator
              float highlightStart = indicatorStartX + itemWidth * highlightPosition;
              c.drawLine(highlightStart, indicatorPosY,
                      highlightStart + mIndicatorItemLength, indicatorPosY, mPaint);
          } else {
              float highlightStart = indicatorStartX + itemWidth * highlightPosition;
              // calculate partial highlight
              float partialLength = mIndicatorItemLength * progress;
  
              // draw the cut off highlight
              c.drawLine(highlightStart + partialLength, indicatorPosY,
                      highlightStart + mIndicatorItemLength, indicatorPosY, mPaint);
  
              // draw the highlight overlapping to the next item as well
              if (highlightPosition &lt; itemCount - 1) {
                  highlightStart += itemWidth;
                  c.drawLine(highlightStart, indicatorPosY,
                          highlightStart + partialLength, indicatorPosY, mPaint);
              }
          }
      }
  
      @Override
      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
          super.getItemOffsets(outRect, view, parent, state);
          outRect.bottom = mIndicatorHeight;
      }
  }
  </code></pre>