content: /*
   * Copyright (C) 2015-present, Ant Financial Services Group
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * 	http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package com.alipay.hulu.ui;
  
  import android.content.Context;
  import android.content.res.TypedArray;
  import android.graphics.Canvas;
  import android.graphics.Paint;
  import android.graphics.Rect;
  import android.graphics.drawable.Drawable;
  import androidx.core.content.ContextCompat;
  import androidx.recyclerview.widget.LinearLayoutManager;
  import androidx.recyclerview.widget.RecyclerView;
  import android.view.View;
  
  /**
   * Created by cathor on 17/8/21.
   */
  public class RecycleViewDivider extends RecyclerView.ItemDecoration {
  
      private Paint mPaint;
      private Drawable mDivider;
      private int mDividerHeight = 1;//分割线高度，默认为1px
      private int mOrientation;//列表的方向：LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL
      private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
  
      /**
       * 默认分割线：高度为2px，颜色为灰色
       *
       * @param context
       * @param orientation 列表方向
       */
      public RecycleViewDivider(Context context, int orientation) {
          if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {
              throw new IllegalArgumentException("请输入正确的参数！");
          }
          mOrientation = orientation;
  
          final TypedArray a = context.obtainStyledAttributes(ATTRS);
          mDivider = a.getDrawable(0);
          a.recycle();
      }
  
      /**
       * 自定义分割线
       *
       * @param context
       * @param orientation 列表方向
       * @param drawableId  分割线图片
       */
      public RecycleViewDivider(Context context, int orientation, int drawableId) {
          this(context, orientation);
          mDivider = ContextCompat.getDrawable(context, drawableId);
          mDividerHeight = mDivider.getIntrinsicHeight();
      }
  
      /**
       * 自定义分割线
       *
       * @param context
       * @param orientation   列表方向
       * @param dividerHeight 分割线高度
       * @param dividerColor  分割线颜色
       */
      public RecycleViewDivider(Context context, int orientation, int dividerHeight, int dividerColor) {
          this(context, orientation);
          mDividerHeight = dividerHeight;
          mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
          mPaint.setColor(dividerColor);
          mPaint.setStyle(Paint.Style.FILL);
      }
  
  
      //获取分割线尺寸
      @Override
      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
          super.getItemOffsets(outRect, view, parent, state);
          outRect.set(0, 0, 0, mDividerHeight);
      }
  
      //绘制分割线
      @Override
      public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
          super.onDraw(c, parent, state);
          if (mOrientation == LinearLayoutManager.VERTICAL) {
              drawVertical(c, parent);
          } else {
              drawHorizontal(c, parent);
          }
      }
  
      //绘制横向 item 分割线
      private void drawHorizontal(Canvas canvas, RecyclerView parent) {
          final int left = parent.getPaddingLeft();
          final int right = parent.getMeasuredWidth() - parent.getPaddingRight();
          final int childSize = parent.getChildCount();
          for (int i = 0; i < childSize; i++) {
              final View child = parent.getChildAt(i);
              RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
              final int top = child.getBottom() + layoutParams.bottomMargin;
              final int bottom = top + mDividerHeight;
              if (mDivider != null) {
                  mDivider.setBounds(left, top, right, bottom);
                  mDivider.draw(canvas);
              }
              if (mPaint != null) {
                  canvas.drawRect(left, top, right, bottom, mPaint);
              }
          }
      }
  
      //绘制纵向 item 分割线
      private void drawVertical(Canvas canvas, RecyclerView parent) {
          final int top = parent.getPaddingTop();
          final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom();
          final int childSize = parent.getChildCount();
          for (int i = 0; i < childSize; i++) {
              final View child = parent.getChildAt(i);
              RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
              final int left = child.getRight() + layoutParams.rightMargin;
              final int right = left + mDividerHeight;
              if (mDivider != null) {
                  mDivider.setBounds(left, top, right, bottom);
                  mDivider.draw(canvas);
              }
              if (mPaint != null) {
                  canvas.drawRect(left, top, right, bottom, mPaint);
              }
          }
      }
  }
  