android.support.v7.widget.OrientationHelper#VERTICAL源码实例Demo

下面列出了android.support.v7.widget.OrientationHelper#VERTICAL 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

void calculateMargin( Rect outRect,
                      int position,
                      int spanCurrent,
                      int itemCount,
                      @IntRange( from = 0, to = 1 ) int orientation,
                      boolean isReverse,
                      boolean isRTL ){
    if( orientation == OrientationHelper.VERTICAL ){
        outRect.left = spanCurrent * spaceItem / spanCount;
        outRect.right = spaceItem - ( spanCurrent + 1 ) * spaceItem / spanCount;
        if( isReverse ){
            if( position >= spanCount ) outRect.bottom = spaceItem;
        }else{
            if( position >= spanCount ) outRect.top = spaceItem;
        }
    }else if( orientation == OrientationHelper.HORIZONTAL ){
        outRect.top = spanCurrent * spaceItem / spanCount;
        outRect.bottom = spaceItem - ( spanCurrent + 1 ) * spaceItem / spanCount;
        if( isReverse ){
            if( position >= spanCount ) outRect.right = spaceItem;
        }else{
            if( position >= spanCount ) outRect.left = spaceItem;
        }
    }
}
 
源代码2 项目: RecyclerViewDemo   文件: Demo4Activity.java
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerview = (RecyclerView) findViewById(R.id.recyclerview);
//        recyclerview.setLayoutManager(new GridLayoutManager(this, 3));
//        recyclerview.setLayoutManager(new LinearLayoutManager(this,
//                LinearLayoutManager.VERTICAL, false));
        recyclerview.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));

        Divider divider = new Divider(new ColorDrawable(0xffff0000), OrientationHelper.VERTICAL);
        //单位:px
        divider.setMargin(50, 50, 50, 50);
        divider.setHeight(20);
        recyclerview.addItemDecoration(divider);
        recyclerview.setAdapter(new Demo3Adapter(this));
    }
 
源代码3 项目: fangzhuishushenqi   文件: DividerDecoration.java
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    int position = parent.getChildAdapterPosition(view);
    int orientation = 0;
    int headerCount = 0,footerCount = 0;
    if (parent.getAdapter() instanceof RecyclerArrayAdapter){
        headerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getHeaderCount();
        footerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getFooterCount();
    }

    RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
    if (layoutManager instanceof StaggeredGridLayoutManager){
        orientation = ((StaggeredGridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof GridLayoutManager){
        orientation = ((GridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof LinearLayoutManager){
        orientation = ((LinearLayoutManager) layoutManager).getOrientation();
    }

    if (position>=headerCount&&position<parent.getAdapter().getItemCount()-footerCount||mDrawHeaderFooter){
        if (orientation == OrientationHelper.VERTICAL){
            outRect.bottom = mHeight;
        }else {
            outRect.right = mHeight;
        }
    }
}
 
源代码4 项目: XFrame   文件: DividerDecoration.java
/**
 * 返回条目之间的间隔,例如我们想仿照ListView一样添加分割线,那么就需要设置outRect的下边距。
 * @param outRect
 * @param view
 * @param parent
 * @param state
 */
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    int position = parent.getChildAdapterPosition(view);
    int orientation = 0;
    int headerCount = 0,footerCount = 0;
    if (parent.getAdapter() instanceof XRecyclerViewAdapter){
        headerCount = ((XRecyclerViewAdapter) parent.getAdapter()).getHeaderCount();
        footerCount = ((XRecyclerViewAdapter) parent.getAdapter()).getFooterCount();
    }

    RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
    if (layoutManager instanceof StaggeredGridLayoutManager){
        orientation = ((StaggeredGridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof GridLayoutManager){
        orientation = ((GridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof LinearLayoutManager){
        orientation = ((LinearLayoutManager) layoutManager).getOrientation();
    }

    if (position>=headerCount&&position<parent.getAdapter().getItemCount()-footerCount||mDrawHeaderFooter){
        if (orientation == OrientationHelper.VERTICAL){
            outRect.bottom = mHeight;
        }else {
            outRect.right = mHeight;
        }
    }
}
 
源代码5 项目: YCRefreshView   文件: DividerViewItemLine.java
/**
 * 调用的是getItemOffsets会被多次调用,在layoutManager每次测量可摆放的view的时候回调用一次,
 * 在当前状态下需要摆放多少个view这个方法就会回调多少次。
 * @param outRect                   核心参数,这个rect相当于item摆放的时候设置的margin,
 *                                  rect的left相当于item的marginLeft,
 *                                  rect的right相当于item的marginRight
 * @param view                      当前绘制的view,可以用来获取它在adapter中的位置
 * @param parent                    recyclerView
 * @param state                     状态,用的很少
 */
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
                           @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
    int position = parent.getChildAdapterPosition(view);
    int orientation = 0;
    int headerCount = 0,footerCount = 0;
    if (parent.getAdapter()==null){
        return;
    }
    //获取header和footer的数量
    if (parent.getAdapter() instanceof RecyclerArrayAdapter){
        headerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getHeaderCount();
        footerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getFooterCount();
    }

    RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
    if (layoutManager instanceof StaggeredGridLayoutManager){
        orientation = ((StaggeredGridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof GridLayoutManager){
        orientation = ((GridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof LinearLayoutManager){
        orientation = ((LinearLayoutManager) layoutManager).getOrientation();
    }
    int itemCount = parent.getAdapter().getItemCount();
    int count = itemCount-footerCount;

    //下面代码才是重点,更多内容可以看我的GitHub博客汇总:https://github.com/yangchong211/YCBlogs
    if (mDrawHeaderFooter){
        if (position >= headerCount && position<count){
            if (orientation == OrientationHelper.VERTICAL){
                //当是竖直方向的时候,距离底部marginBottom是分割线的高度
                outRect.bottom = mHeight;
            }else {
                //noinspection SuspiciousNameCombination
                outRect.right = mHeight;
            }
        }
    }
}
 
private void initLayoutManagerType() {
    this.mLayoutManagerType = mRecyclerViewListener.getCurLayoutManagerType();
    RecyclerView.LayoutManager layoutManager = mRecyclerViewListener.getCurLayoutManager();
    switch (mLayoutManagerType) {
        case FamiliarRecyclerView.LAYOUT_MANAGER_TYPE_LINEAR:
            LinearLayoutManager curLinearLayoutManager = (LinearLayoutManager)layoutManager;
            if (curLinearLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL) {
                mOrientation = OrientationHelper.HORIZONTAL;
            } else {
                mOrientation = OrientationHelper.VERTICAL;
            }
            break;
        case FamiliarRecyclerView.LAYOUT_MANAGER_TYPE_GRID:
            GridLayoutManager curGridLayoutManager = (GridLayoutManager)layoutManager;
            mGridSpanCount = curGridLayoutManager.getSpanCount();
            if (curGridLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL) {
                mOrientation = OrientationHelper.HORIZONTAL;
            } else {
                mOrientation = OrientationHelper.VERTICAL;
            }
            break;
        case FamiliarRecyclerView.LAYOUT_MANAGER_TYPE_STAGGERED_GRID:
            StaggeredGridLayoutManager curStaggeredGridLayoutManager = (StaggeredGridLayoutManager)layoutManager;
            mGridSpanCount = curStaggeredGridLayoutManager.getSpanCount();
            if (curStaggeredGridLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL) {
                mOrientation = OrientationHelper.HORIZONTAL;
            } else {
                mOrientation = OrientationHelper.VERTICAL;
            }
            break;
        default:
            this.mLayoutManagerType = FamiliarRecyclerView.LAYOUT_MANAGER_TYPE_LINEAR;
    }

    initDivisible();
}
 
private void initDivisible() {
    int tempDividerDrawableSize = mOrientation == OrientationHelper.VERTICAL ? mHorizontalDividerDrawableHeight : mVerticalDividerDrawableHeight;

    if (mGridSpanCount > 0 && tempDividerDrawableSize % mGridSpanCount != 0) {
        float t1 = (float)tempDividerDrawableSize / mGridSpanCount;
        mUnDivisibleValue = t1 - (int)t1;
        isDivisible = false;
    } else {
        mUnDivisibleValue = 0;
        isDivisible = true;
    }
}
 
源代码8 项目: BookReader   文件: DividerDecoration.java
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    int position = parent.getChildAdapterPosition(view);
    int orientation = 0;
    int headerCount = 0,footerCount = 0;
    if (parent.getAdapter() instanceof RecyclerArrayAdapter){
        headerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getHeaderCount();
        footerCount = ((RecyclerArrayAdapter) parent.getAdapter()).getFooterCount();
    }

    RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
    if (layoutManager instanceof StaggeredGridLayoutManager){
        orientation = ((StaggeredGridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof GridLayoutManager){
        orientation = ((GridLayoutManager) layoutManager).getOrientation();
    }else if (layoutManager instanceof LinearLayoutManager){
        orientation = ((LinearLayoutManager) layoutManager).getOrientation();
    }

    if (position>=headerCount&&position<parent.getAdapter().getItemCount()-footerCount||mDrawHeaderFooter){
        if (orientation == OrientationHelper.VERTICAL){
            outRect.bottom = mHeight;
        }else {
            outRect.right = mHeight;
        }
    }
}
 
源代码9 项目: ucar-weex-core   文件: BaseBounceView.java
boolean isVertical(){
    return mOrientation==OrientationHelper.VERTICAL;
}
 
源代码10 项目: weex-uikit   文件: BaseBounceView.java
boolean isVertical(){
    return mOrientation==OrientationHelper.VERTICAL;
}
 
源代码11 项目: weex-uikit   文件: BounceRecyclerView.java
public BounceRecyclerView(Context context, AttributeSet attrs) {
  super(context, attrs, OrientationHelper.VERTICAL);
}
 
源代码12 项目: weex   文件: BaseBounceView.java
boolean isVertical(){
    return mOrientation==OrientationHelper.VERTICAL;
}
 
源代码13 项目: weex   文件: BounceRecyclerView.java
public BounceRecyclerView(Context context, AttributeSet attrs) {
    super(context, attrs, OrientationHelper.VERTICAL);
}
 
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();
    int position = params.getViewAdapterPosition();
    int headersCount;
    int footerCount;
    int itemViewCount;
    FamiliarRecyclerView curFamiliarRecyclerView = null;
    if (parent instanceof FamiliarRecyclerView) {
        curFamiliarRecyclerView = (FamiliarRecyclerView) parent;

        footerCount = curFamiliarRecyclerView.getFooterViewsCount();
        headersCount = curFamiliarRecyclerView.getHeaderViewsCount();
        itemViewCount = curFamiliarRecyclerView.getAdapter().getItemCount() - headersCount - footerCount;
    } else {
        headersCount = 0;
        footerCount = 0;
        itemViewCount = parent.getAdapter().getItemCount();
    }

    // intercept filter
    if (isInterceptFilter(position, headersCount, footerCount, itemViewCount)) return;

    // set headView or footerView
    if (isHeadViewPos(headersCount, position)) {
        // head
        if (mOrientation == OrientationHelper.HORIZONTAL) {
            outRect.set(mVerticalDividerDrawableHeight, 0, 0, 0);
        } else {
            outRect.set(0, mHorizontalDividerDrawableHeight, 0, 0);
        }
        return ;
    } else if (isFooterViewPos(headersCount, footerCount, itemViewCount, position)) {
        // footer
        if (mOrientation == OrientationHelper.HORIZONTAL) {
            outRect.set(mVerticalDividerDrawableHeight, 0, 0, 0);
        } else {
            outRect.set(0, mHorizontalDividerDrawableHeight, 0, 0);
        }
        return ;
    } else if (isEmptyView(curFamiliarRecyclerView, position, headersCount)) {
        // emptyView
        if (isHeaderDividersEnabled && headersCount > 0) {
            if (mOrientation == OrientationHelper.HORIZONTAL) {
                outRect.set(mVerticalDividerDrawableHeight, 0, 0, 0);
            } else {
                outRect.set(0, mHorizontalDividerDrawableHeight, 0, 0);
            }
        }
        return ;
    }

    // set itemView
    if (mLayoutManagerType == FamiliarRecyclerView.LAYOUT_MANAGER_TYPE_GRID || mLayoutManagerType == FamiliarRecyclerView.LAYOUT_MANAGER_TYPE_STAGGERED_GRID) {
        processGridOffsets(outRect, position, headersCount, view);
    } else {
        int topOrLeftSize;
        if ((!isHeaderDividersEnabled || headersCount == 0) && position - headersCount == 0) {
            topOrLeftSize = 0;
        } else {
            topOrLeftSize = mOrientation == OrientationHelper.VERTICAL ? mHorizontalDividerDrawableHeight : mVerticalDividerDrawableHeight;
        }

        if (mOrientation == OrientationHelper.HORIZONTAL) {
            outRect.set(topOrLeftSize, mItemViewBothSidesMargin, 0, mItemViewBothSidesMargin);
        } else {
            outRect.set(mItemViewBothSidesMargin, topOrLeftSize, mItemViewBothSidesMargin, 0);
        }
    }
}
 
private void processGridOffsets(Rect outRect, int position, int headersCount, View view) {
    int curGridNum;
    if (mLayoutManagerType == FamiliarRecyclerView.LAYOUT_MANAGER_TYPE_GRID) {
        curGridNum = (position - headersCount) % mGridSpanCount;
    } else {
        curGridNum = ((StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams()).getSpanIndex();
    }

    int leftOrTopOffset, rightOrBottomOffset;
    float mDividerLeftBaseOffset, mDividerRightBaseOffset;

    final int tempDividerDrawableSize = mOrientation == OrientationHelper.HORIZONTAL ? mHorizontalDividerDrawableHeight : mVerticalDividerDrawableHeight;
    if (mItemViewBothSidesMargin > 0) {
        // item view left and right margin
        mDividerLeftBaseOffset = (float)tempDividerDrawableSize / mGridSpanCount * curGridNum - mItemViewBothSidesMargin * 2 / mGridSpanCount * curGridNum + mItemViewBothSidesMargin;
        mDividerRightBaseOffset = (float)tempDividerDrawableSize / mGridSpanCount * (mGridSpanCount - (curGridNum + 1)) + mItemViewBothSidesMargin * 2 / mGridSpanCount * (curGridNum + 1) - mItemViewBothSidesMargin;
    } else {
        mDividerLeftBaseOffset = (float)tempDividerDrawableSize / mGridSpanCount * curGridNum;
        mDividerRightBaseOffset = (float)tempDividerDrawableSize / mGridSpanCount * (mGridSpanCount - (curGridNum + 1));
    }

    if (!isDivisible && mUnDivisibleValue > 0) {
        leftOrTopOffset = Math.round(mDividerLeftBaseOffset - mUnDivisibleValue * (curGridNum + 1));
        rightOrBottomOffset = Math.round(mDividerRightBaseOffset + mUnDivisibleValue * (curGridNum + 1));
    } else {
        leftOrTopOffset = (int)mDividerLeftBaseOffset;
        rightOrBottomOffset = (int)mDividerRightBaseOffset;
    }

    int topOrLeftSize;
    if ((!isHeaderDividersEnabled || headersCount == 0) && isGridItemLayoutFirstRow(position, headersCount) && !mIsMarginDividersEnabled) {
        topOrLeftSize = 0;
    } else {
        topOrLeftSize = mOrientation == OrientationHelper.VERTICAL ? mHorizontalDividerDrawableHeight : mVerticalDividerDrawableHeight;
    }

    if (isGridItemLayoutLastColumn(position, headersCount, view)) {
        // last Column
        if (mOrientation == OrientationHelper.HORIZONTAL) {
            outRect.set(topOrLeftSize, leftOrTopOffset, 0, mItemViewBothSidesMargin);
        } else {

            if (mIsMarginDividersEnabled) {
                outRect.set(leftOrTopOffset, topOrLeftSize, topOrLeftSize, 0);
            } else {
                outRect.set(leftOrTopOffset, topOrLeftSize, mItemViewBothSidesMargin, 0);
            }
        }
    } else if (isGridItemLayoutFirstColumn(position, headersCount, view)) {
        // first column
        if (mOrientation == OrientationHelper.HORIZONTAL) {
            outRect.set(topOrLeftSize, mItemViewBothSidesMargin, 0, rightOrBottomOffset);
        } else {
            if (mIsMarginDividersEnabled) {
                outRect.set(topOrLeftSize, topOrLeftSize, rightOrBottomOffset, 0);
            } else {
                outRect.set(mItemViewBothSidesMargin, topOrLeftSize, rightOrBottomOffset, 0);
            }

        }
    } else {
        // middle column
        if (mOrientation == OrientationHelper.HORIZONTAL) {
            outRect.set(topOrLeftSize, leftOrTopOffset, 0, rightOrBottomOffset);
        } else {
            outRect.set(leftOrTopOffset, topOrLeftSize, rightOrBottomOffset, 0);
        }
    }
}
 
源代码16 项目: AndroidBase   文件: FamiliarRecyclerView.java
private void processDefDivider(boolean isLinearLayoutManager, int layoutManagerOrientation) {
    if (!isDefaultItemDecoration)
        return;

    if ((null == mVerticalDivider || null == mHorizontalDivider) && null != mDefAllDivider) {
        if (isLinearLayoutManager) {
            if (layoutManagerOrientation == OrientationHelper.VERTICAL && null == mHorizontalDivider) {
                mHorizontalDivider = mDefAllDivider;
            } else if (layoutManagerOrientation == OrientationHelper.HORIZONTAL && null == mVerticalDivider) {
                mVerticalDivider = mDefAllDivider;
            }
        } else {
            if (null == mVerticalDivider) {
                mVerticalDivider = mDefAllDivider;
            }

            if (null == mHorizontalDivider) {
                mHorizontalDivider = mDefAllDivider;
            }
        }
    }

    if (mVerticalDividerHeight > 0 && mHorizontalDividerHeight > 0)
        return;

    if (mDefAllDividerHeight > 0) {
        if (isLinearLayoutManager) {
            if (layoutManagerOrientation == OrientationHelper.VERTICAL && mHorizontalDividerHeight <= 0) {
                mHorizontalDividerHeight = mDefAllDividerHeight;
            } else if (layoutManagerOrientation == OrientationHelper.HORIZONTAL && mVerticalDividerHeight <= 0) {
                mVerticalDividerHeight = mDefAllDividerHeight;
            }
        } else {
            if (mVerticalDividerHeight <= 0) {
                mVerticalDividerHeight = mDefAllDividerHeight;
            }

            if (mHorizontalDividerHeight <= 0) {
                mHorizontalDividerHeight = mDefAllDividerHeight;
            }
        }
    } else {
        if (isLinearLayoutManager) {
            if (layoutManagerOrientation == OrientationHelper.VERTICAL && mHorizontalDividerHeight <= 0) {
                if (null != mHorizontalDivider) {
                    if (mHorizontalDivider.getIntrinsicHeight() > 0) {
                        mHorizontalDividerHeight = mHorizontalDivider.getIntrinsicHeight();
                    } else {
                        mHorizontalDividerHeight = DEF_DIVIDER_HEIGHT;
                    }
                }
            } else if (layoutManagerOrientation == OrientationHelper.HORIZONTAL && mVerticalDividerHeight <= 0) {
                if (null != mVerticalDivider) {
                    if (mVerticalDivider.getIntrinsicHeight() > 0) {
                        mVerticalDividerHeight = mVerticalDivider.getIntrinsicHeight();
                    } else {
                        mVerticalDividerHeight = DEF_DIVIDER_HEIGHT;
                    }
                }
            }
        } else {
            if (mVerticalDividerHeight <= 0 && null != mVerticalDivider) {
                if (mVerticalDivider.getIntrinsicHeight() > 0) {
                    mVerticalDividerHeight = mVerticalDivider.getIntrinsicHeight();
                } else {
                    mVerticalDividerHeight = DEF_DIVIDER_HEIGHT;
                }
            }

            if (mHorizontalDividerHeight <= 0 && null != mHorizontalDivider) {
                if (mHorizontalDivider.getIntrinsicHeight() > 0) {
                    mHorizontalDividerHeight = mHorizontalDivider.getIntrinsicHeight();
                } else {
                    mHorizontalDividerHeight = DEF_DIVIDER_HEIGHT;
                }
            }
        }
    }
}
 
源代码17 项目: COCOFramework   文件: RecyclerViewFragment.java
protected int orientation() {
    return OrientationHelper.VERTICAL;
}