FileDocCategorySizeDatePackage
OrientationHelper.javaAPI DocAndroid 5.1 API12209Thu Mar 12 22:22:56 GMT 2015android.support.v7.widget

OrientationHelper

public abstract class OrientationHelper extends Object
Helper class for LayoutManagers to abstract measurements depending on the View's orientation.

It is developed to easily support vertical and horizontal orientations in a LayoutManager but can also be used to abstract calls around view bounds and child measurements with margins and decorations.

see
#createHorizontalHelper(RecyclerView.LayoutManager)
see
#createVerticalHelper(RecyclerView.LayoutManager)

Fields Summary
private static final int
INVALID_SIZE
protected final RecyclerView.LayoutManager
mLayoutManager
public static final int
HORIZONTAL
public static final int
VERTICAL
private int
mLastTotalSpace
Constructors Summary
private OrientationHelper(RecyclerView.LayoutManager layoutManager)


       
        mLayoutManager = layoutManager;
    
Methods Summary
public static android.support.v7.widget.OrientationHelpercreateHorizontalHelper(RecyclerView.LayoutManager layoutManager)
Creates a horizontal OrientationHelper for the given LayoutManager.

param
layoutManager The LayoutManager to attach to.
return
A new OrientationHelper

        return new OrientationHelper(layoutManager) {
            @Override
            public int getEndAfterPadding() {
                return mLayoutManager.getWidth() - mLayoutManager.getPaddingRight();
            }

            @Override
            public int getEnd() {
                return mLayoutManager.getWidth();
            }

            @Override
            public void offsetChildren(int amount) {
                mLayoutManager.offsetChildrenHorizontal(amount);
            }

            @Override
            public int getStartAfterPadding() {
                return mLayoutManager.getPaddingLeft();
            }

            @Override
            public int getDecoratedMeasurement(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedMeasuredWidth(view) + params.leftMargin
                        + params.rightMargin;
            }

            @Override
            public int getDecoratedMeasurementInOther(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedMeasuredHeight(view) + params.topMargin
                        + params.bottomMargin;
            }

            @Override
            public int getDecoratedEnd(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedRight(view) + params.rightMargin;
            }

            @Override
            public int getDecoratedStart(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedLeft(view) - params.leftMargin;
            }

            @Override
            public int getTotalSpace() {
                return mLayoutManager.getWidth() - mLayoutManager.getPaddingLeft()
                        - mLayoutManager.getPaddingRight();
            }

            @Override
            public void offsetChild(View view, int offset) {
                view.offsetLeftAndRight(offset);
            }

            @Override
            public int getEndPadding() {
                return mLayoutManager.getPaddingRight();
            }
        };
    
public static android.support.v7.widget.OrientationHelpercreateOrientationHelper(RecyclerView.LayoutManager layoutManager, int orientation)
Creates an OrientationHelper for the given LayoutManager and orientation.

param
layoutManager LayoutManager to attach to
param
orientation Desired orientation. Should be {@link #HORIZONTAL} or {@link #VERTICAL}
return
A new OrientationHelper

        switch (orientation) {
            case HORIZONTAL:
                return createHorizontalHelper(layoutManager);
            case VERTICAL:
                return createVerticalHelper(layoutManager);
        }
        throw new IllegalArgumentException("invalid orientation");
    
public static android.support.v7.widget.OrientationHelpercreateVerticalHelper(RecyclerView.LayoutManager layoutManager)
Creates a vertical OrientationHelper for the given LayoutManager.

param
layoutManager The LayoutManager to attach to.
return
A new OrientationHelper

        return new OrientationHelper(layoutManager) {
            @Override
            public int getEndAfterPadding() {
                return mLayoutManager.getHeight() - mLayoutManager.getPaddingBottom();
            }

            @Override
            public int getEnd() {
                return mLayoutManager.getHeight();
            }

            @Override
            public void offsetChildren(int amount) {
                mLayoutManager.offsetChildrenVertical(amount);
            }

            @Override
            public int getStartAfterPadding() {
                return mLayoutManager.getPaddingTop();
            }

            @Override
            public int getDecoratedMeasurement(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedMeasuredHeight(view) + params.topMargin
                        + params.bottomMargin;
            }

            @Override
            public int getDecoratedMeasurementInOther(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedMeasuredWidth(view) + params.leftMargin
                        + params.rightMargin;
            }

            @Override
            public int getDecoratedEnd(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedBottom(view) + params.bottomMargin;
            }

            @Override
            public int getDecoratedStart(View view) {
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)
                        view.getLayoutParams();
                return mLayoutManager.getDecoratedTop(view) - params.topMargin;
            }

            @Override
            public int getTotalSpace() {
                return mLayoutManager.getHeight() - mLayoutManager.getPaddingTop()
                        - mLayoutManager.getPaddingBottom();
            }

            @Override
            public void offsetChild(View view, int offset) {
                view.offsetTopAndBottom(offset);
            }

            @Override
            public int getEndPadding() {
                return mLayoutManager.getPaddingBottom();
            }
        };
    
public abstract intgetDecoratedEnd(android.view.View view)
Returns the end of the view including its decoration and margin.

For example, for the horizontal helper, if a View's right is at pixel 200, has 2px right decoration and 3px right margin, returned value will be 205.

param
view The view element to check
return
The last pixel of the element
see
#getDecoratedStart(android.view.View)

public abstract intgetDecoratedMeasurement(android.view.View view)
Returns the space occupied by this View in the current orientation including decorations and margins.

param
view The view element to check
return
Total space occupied by this view
see
#getDecoratedMeasurementInOther(View)

public abstract intgetDecoratedMeasurementInOther(android.view.View view)
Returns the space occupied by this View in the perpendicular orientation including decorations and margins.

param
view The view element to check
return
Total space occupied by this view in the perpendicular orientation to current one
see
#getDecoratedMeasurement(View)

public abstract intgetDecoratedStart(android.view.View view)
Returns the start of the view including its decoration and margin.

For example, for the horizontal helper, if a View's left is at pixel 20, has 2px left decoration and 3px left margin, returned value will be 15px.

param
view The view element to check
return
The first pixel of the element
see
#getDecoratedEnd(android.view.View)

public abstract intgetEnd()
Returns the end position of the layout without taking padding into account.

return
The end boundary for this layout without considering padding.

public abstract intgetEndAfterPadding()
Returns the end position of the layout after the end padding is removed.

return
The end boundary for this layout.

public abstract intgetEndPadding()
Returns the padding at the end of the layout. For horizontal helper, this is the right padding and for vertical helper, this is the bottom padding. This method does not check whether the layout is RTL or not.

return
The padding at the end of the layout.

public abstract intgetStartAfterPadding()
Returns the start position of the layout after the start padding is added.

return
The very first pixel we can draw.

public abstract intgetTotalSpace()
Returns the total space to layout. This number is the difference between {@link #getEndAfterPadding()} and {@link #getStartAfterPadding()}.

return
Total space to layout children

public intgetTotalSpaceChange()
Returns the layout space change between the previous layout pass and current layout pass.

Make sure you call {@link #onLayoutComplete()} at the end of your LayoutManager's {@link RecyclerView.LayoutManager#onLayoutChildren(RecyclerView.Recycler, RecyclerView.State)} method.

return
The difference between the current total space and previous layout's total space.
see
#onLayoutComplete()

        return INVALID_SIZE == mLastTotalSpace ? 0 : getTotalSpace() - mLastTotalSpace;
    
public abstract voidoffsetChild(android.view.View view, int offset)
Offsets the child in this orientation.

param
view View to offset
param
offset offset amount

public abstract voidoffsetChildren(int amount)
Offsets all children's positions by the given amount.

param
amount Value to add to each child's layout parameters

public voidonLayoutComplete()
Call this method after onLayout method is complete if state is NOT pre-layout. This method records information like layout bounds that might be useful in the next layout calculations.

        mLastTotalSpace = getTotalSpace();