@Override
  protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    if (mColumnCount <= 0) {
      boolean isLandscape = isLandscape();
      mColumnCount = isLandscape ? mColumnCountLandscape : mColumnCountPortrait;
    }

    // our column width is the width of the listview
    // minus it's padding
    // minus the total items margin
    // divided by the number of columns
    mColumnWidth = calculateColumnWidth(getMeasuredWidth());

    if (mColumnTops == null || mColumnTops.length != mColumnCount) {
      mColumnTops = new int[mColumnCount];
      initColumnTops();
    }
    if (mColumnBottoms == null || mColumnBottoms.length != mColumnCount) {
      mColumnBottoms = new int[mColumnCount];
      initColumnBottoms();
    }
    if (mColumnLefts == null || mColumnLefts.length != mColumnCount) {
      mColumnLefts = new int[mColumnCount];
      initColumnLefts();
    }
  }