content: package com.anarchy.classifyview.sample.ireader.widget;
  
  import android.content.Context;
  import android.content.res.TypedArray;
  import android.util.AttributeSet;
  import android.view.View;
  import android.view.ViewGroup;
  
  import com.anarchy.classify.simple.ChangeInfo;
  import com.anarchy.classify.util.L;
  import com.anarchy.classifyview.R;
  
  
  /**
   * User:  Anarchy
   * Email:  rsshinide38@163.com
   * CreateTime: 一月/07/2017  18:21.
   * Description:
   */
  
  public class IReaderGridLayout extends ViewGroup {
      private int mRowCount;
      private int mColumnCount;
      private int mGap;
  
      public IReaderGridLayout(Context context) {
          this(context, null);
      }
  
      public IReaderGridLayout(Context context, AttributeSet attrs) {
          this(context, attrs, 0);
      }
  
      public IReaderGridLayout(Context context, AttributeSet attrs, int defStyleAttr) {
          super(context, attrs, defStyleAttr);
          TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.IReaderGridLayout, defStyleAttr, 0);
          mRowCount = a.getInt(R.styleable.IReaderGridLayout_iReaderRowCount, 2);
          mColumnCount = a.getInt(R.styleable.IReaderGridLayout_iReaderColumnCount, 2);
          mGap = a.getDimensionPixelSize(R.styleable.IReaderGridLayout_iReaderGap, 0);
          a.recycle();
      }
  
  
      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          int widthSize = MeasureSpec.getSize(widthMeasureSpec);
          int widthMode = MeasureSpec.getMode(widthMeasureSpec);
          int heightSize = MeasureSpec.getSize(heightMeasureSpec);
          int heightMode = MeasureSpec.getMode(heightMeasureSpec);
  
  
          if (widthMode == MeasureSpec.AT_MOST || heightMode == MeasureSpec.AT_MOST) {
              super.onMeasure(widthMeasureSpec, heightMeasureSpec);
          } else {
              int suggestWidth = (widthSize - getPaddingLeft() - getPaddingRight() - (mColumnCount -1 )*mGap) / mColumnCount;
              int suggestHeight = (heightSize - getPaddingTop() - getPaddingBottom() - (mRowCount-1)*mGap) / mRowCount;
              int childCount = getChildCount();
              for (int i = 0; i < childCount; i++) {
                  View child = getChildAt(i);
                  child.measure(MeasureSpec.makeMeasureSpec(suggestWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(suggestHeight, MeasureSpec.EXACTLY));
              }
              setMeasuredDimension(widthSize, heightSize);
          }
      }
  
      @Override
      protected void onLayout(boolean changed, int l, int t, int r, int b) {
          int childCount = getChildCount();
          for (int i = 0; i < childCount; i++) {
              View child = getChildAt(i);
              int left = getPaddingLeft() + (i%mColumnCount)*(child.getMeasuredWidth() + mGap);
              int top = getPaddingTop() + (i/mRowCount)*(child.getMeasuredHeight() + mGap);
              child.layout(left,top,left + child.getMeasuredWidth(),top + child.getMeasuredHeight());
          }
      }
  
      ChangeInfo getChangeInfo(){
          ChangeInfo info = new ChangeInfo();
          info.targetLeft = getPaddingLeft();
          info.targetTop = getPaddingTop();
          info.targetWidth = (getWidth() - getPaddingLeft() - getPaddingRight() - (mColumnCount -1 )*mGap)/mColumnCount;
          info.targetHeight = (getHeight() - getPaddingTop() - getPaddingBottom() - (mRowCount-1)*mGap)/mRowCount;
          return info;
      }
  
      /**
       * @hide
       */
      ChangeInfo getSecondItemChangeInfo(){
          ChangeInfo info = new ChangeInfo();
          info.targetWidth = (getWidth() - getPaddingLeft() - getPaddingRight() - (mColumnCount -1 )*mGap)/mColumnCount;
          info.targetHeight = (getHeight() - getPaddingTop() - getPaddingBottom() - (mRowCount-1)*mGap)/mRowCount;
          info.targetLeft = (int) (getPaddingLeft() + info.targetWidth + mGap);
          info.targetTop = getPaddingTop();
          return info;
      }
  
  
  }
  