package com.beloo.widget.chipslayoutmanager.gravity; import android.graphics.Rect; class CenterInRowGravityModifier implements IGravityModifier { @Override public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) { if (childRect.top < minStart) { throw new IllegalArgumentException("top point of input rect can't be lower than minTop"); } if (childRect.bottom > maxEnd) { throw new IllegalArgumentException("bottom point of input rect can't be bigger than maxTop"); } childRect = new Rect(childRect); int placeHeight = maxEnd - minStart; int rectHeight = childRect.bottom - childRect.top; //calculate needed offset int halfOffset = (placeHeight - rectHeight)/2; childRect.top = minStart + halfOffset; childRect.bottom = maxEnd - halfOffset; return childRect; } }