question: public void invalidateLabelOffset ( ) { float margin ; float labelOffset = 0 ; if ( mFollowAxis == VERTICAL ) { if ( mValidAfterDynamic != null ) { mLabelSize = Math . max ( getLabelWidth ( this ) , getLabelWidth ( mValidAfterDynamic ) ) ; margin = getLabelTop ( mValidAfterDynamic ) - getLabelBottom ( this ) ; if ( margin < 0 ) { labelOffset = margin / 2 ; } } else if ( mValidBeforeDynamic != null ) { mLabelSize = Math . max ( getLabelWidth ( this ) , getLabelWidth ( mValidBeforeDynamic ) ) ; margin = getLabelTop ( this ) - getLabelBottom ( mValidBeforeDynamic ) ; if ( margin < 0 ) { labelOffset = - margin / 2 ; } } else { mLabelSize = getLabelWidth ( this ) ; } } else { } mLabelSize = Math . max ( mLabelSize , mLabelMinSize ) ; if ( labelOffset != mLabelOffset ) { mLabelOffset = labelOffset ; invalidate ( ) ; if ( mValidAfterDynamic != null ) mValidAfterDynamic . invalidateLabelOffset ( ) ; if ( mValidBeforeDynamic != null ) mValidBeforeDynamic . invalidateLabelOffset ( ) ; } }
target:  When overlapping with neighbor, split difference and push label.