Author: Not specified Language: text
Description: Not specified Timestamp: 2018-01-23 02:38:22 +0000
View raw paste Reply
  1.  
  2. /**
  3.  * LinearLayoutManager????????
  4.  * @author lan on 2018/1/18.
  5.  */
  6.  
  7. public class DividerItemDecoration extends RecyclerView.ItemDecoration {
  8.  
  9.     /**
  10.      * ???drawable
  11.      */
  12.     private Drawable divider;
  13.  
  14.     public DividerItemDecoration(Context context) {
  15.  
  16.         divider = context.getResources().getDrawable(R.drawable.divider, context.getTheme());
  17.     }
  18.  
  19.     /**
  20.      * ??
  21.      */
  22.     private int orientation = LinearLayout.VERTICAL;
  23.  
  24.     /**
  25.      * ???????
  26.      * @param orientation
  27.      */
  28.     public void setorientation(int orientation) {
  29.  
  30.         if (orientation != LinearLayout.HORIZONTAL && orientation != LinearLayout.VERTICAL) {
  31.             return;
  32.         }
  33.  
  34.         this.orientation = orientation;
  35.     }
  36.  
  37.     /**
  38.      * 1.??????????????????--Rect?
  39.      * ????????
  40.      *
  41.      * @param outRect ????????????????????
  42.      * @param view
  43.      * @param parent
  44.      * @param state
  45.      */
  46.     @Override
  47.     public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
  48.         super.getItemOffsets(outRect, view, parent, state);
  49.  
  50.         /*
  51.             ???????????item???????????????
  52.             ????????item????????
  53.             ????????item????????
  54.          */
  55.         if (orientation == LinearLayout.VERTICAL) {
  56.             outRect.set(0, 0, 0, divider.getIntrinsicHeight());
  57.         } else {
  58.             outRect.set(0, 0, divider.getIntrinsicWidth(), 0);
  59.         }
  60.     }
  61.  
  62.     /**
  63.      * 2.???????
  64.      *
  65.      * @param c
  66.      * @param parent
  67.      * @param state
  68.      */
  69.     @Override
  70.     public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
  71.         super.onDraw(c, parent, state);
  72.         /*
  73.             ?????????
  74.          */
  75.         if (orientation == LinearLayout.VERTICAL) {
  76.             drawVerticalLine(c, parent);
  77.         } else {
  78.             drawHorizontalLine(c, parent);
  79.         }
  80.     }
  81.  
  82.     /**
  83.      * ?????
  84.      * @param canvas
  85.      * @param parent
  86.      */
  87.     private void drawVerticalLine(Canvas canvas, RecyclerView parent) {
  88.  
  89.         /*
  90.             ???????item???????????????
  91.          */
  92.         int count = parent.getChildCount();
  93.  
  94.         for (int index = 0; index < count; index++) {
  95.  
  96.             View view = parent.getChildAt(index);
  97.             //view?margin??????view?????
  98.             RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();
  99.  
  100.             int left = params.leftMargin;
  101.             //view????????????
  102.             int right = view.getRight();
  103.  
  104.             int top = view.getBottom() + (int) view.getTranslationY();
  105.             int bottom = top + params.bottomMargin + divider.getIntrinsicHeight();
  106.             divider.setBounds(left, top, right, bottom);
  107.             divider.draw(canvas);
  108.         }
  109.     }
  110.  
  111.     /**
  112.      * ???????
  113.      * @param canvas
  114.      * @param parent
  115.      */
  116.     private void drawHorizontalLine(Canvas canvas, RecyclerView parent) {
  117.  
  118.         int count = parent.getChildCount();
  119.  
  120.         for (int index = 0; index < count; index++) {
  121.  
  122.             View view = parent.getChildAt(index);
  123.  
  124.             RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();
  125.  
  126.             int left = (int) (view.getLeft() + view.getTranslationX());
  127.             int right = left + divider.getIntrinsicWidth();
  128.  
  129.             int top = params.topMargin;
  130.             int bottom = top + view.getHeight();
  131.             divider.setBounds(left, top, right, bottom);
  132.             divider.draw(canvas);
  133.         }
  134.     }
  135. }
  136.  
View raw paste Reply