Search in sources :

Example 76 with LEFT

use of android.support.v7.widget.helper.ItemTouchHelper.LEFT in project android-parallax-recyclerview by kanytu.

the class HeaderLayoutManagerFixed method fill.

/**
 * The magic functions :). Fills the given layout, defined by the renderState. This is fairly
 * independent from the rest of the {@link android.support.v7.widget.LinearLayoutManager}
 * and with little change, can be made publicly available as a helper class.
 *
 * @param recycler        Current recycler that is attached to RecyclerView
 * @param renderState     Configuration on how we should fill out the available space.
 * @param state           Context passed by the RecyclerView to control scroll steps.
 * @param stopOnFocusable If true, filling stops in the first focusable new child
 * @return Number of pixels that it added. Useful for scoll functions.
 */
private int fill(RecyclerView.Recycler recycler, RenderState renderState, RecyclerView.State state, boolean stopOnFocusable) {
    // max offset we should set is mFastScroll + available
    final int start = renderState.mAvailable;
    if (renderState.mScrollingOffset != RenderState.SCOLLING_OFFSET_NaN) {
        // TODO ugly bug fix. should not happen
        if (renderState.mAvailable < 0) {
            renderState.mScrollingOffset += renderState.mAvailable;
        }
        recycleByRenderState(recycler, renderState);
    }
    int remainingSpace = renderState.mAvailable + renderState.mExtra + mHeaderIncrementFixer;
    while (remainingSpace > 0 && renderState.hasMore(state)) {
        View view = renderState.next(recycler);
        if (view == null) {
            if (DEBUG && renderState.mScrapList == null) {
                throw new RuntimeException("received null view when unexpected");
            }
            // no more items to layout.
            break;
        }
        RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();
        if (!params.isItemRemoved() && mRenderState.mScrapList == null) {
            if (mShouldReverseLayout == (renderState.mLayoutDirection == RenderState.LAYOUT_START)) {
                addView(view);
            } else {
                addView(view, 0);
            }
        }
        measureChildWithMargins(view, 0, 0);
        int consumed = mOrientationHelper.getDecoratedMeasurement(view);
        int left, top, right, bottom;
        if (mOrientation == VERTICAL) {
            if (isLayoutRTL()) {
                right = getWidth() - getPaddingRight();
                left = right - mOrientationHelper.getDecoratedMeasurementInOther(view);
            } else {
                left = getPaddingLeft();
                right = left + mOrientationHelper.getDecoratedMeasurementInOther(view);
            }
            if (renderState.mLayoutDirection == RenderState.LAYOUT_START) {
                bottom = renderState.mOffset;
                top = renderState.mOffset - consumed;
            } else {
                top = renderState.mOffset;
                bottom = renderState.mOffset + consumed;
            }
        } else {
            top = getPaddingTop();
            bottom = top + mOrientationHelper.getDecoratedMeasurementInOther(view);
            if (renderState.mLayoutDirection == RenderState.LAYOUT_START) {
                right = renderState.mOffset;
                left = renderState.mOffset - consumed;
            } else {
                left = renderState.mOffset;
                right = renderState.mOffset + consumed;
            }
        }
        // We calculate everything with View's bounding box (which includes decor and margins)
        // To calculate correct layout position, we subtract margins.
        layoutDecorated(view, left + params.leftMargin, top + params.topMargin, right - params.rightMargin, bottom - params.bottomMargin);
        if (DEBUG) {
            Log.d(TAG, "laid out child at position " + getPosition(view) + ", with l:" + (left + params.leftMargin) + ", t:" + (top + params.topMargin) + ", r:" + (right - params.rightMargin) + ", b:" + (bottom - params.bottomMargin));
        }
        renderState.mOffset += consumed * renderState.mLayoutDirection;
        if (!params.isItemRemoved()) {
            renderState.mAvailable -= consumed;
            // we keep a separate remaining space because mAvailable is important for recycling
            remainingSpace -= consumed;
        }
        if (renderState.mScrollingOffset != RenderState.SCOLLING_OFFSET_NaN) {
            renderState.mScrollingOffset += consumed;
            if (renderState.mAvailable < 0) {
                renderState.mScrollingOffset += renderState.mAvailable;
            }
            recycleByRenderState(recycler, renderState);
        }
        if (stopOnFocusable && view.isFocusable()) {
            break;
        }
        if (state != null && state.getTargetScrollPosition() == getPosition(view)) {
            break;
        }
    }
    if (DEBUG) {
        validateChildOrder();
    }
    return start - renderState.mAvailable;
}
Also used : RecyclerView(android.support.v7.widget.RecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) View(android.view.View)

Example 77 with LEFT

use of android.support.v7.widget.helper.ItemTouchHelper.LEFT in project DragListView by woxblom.

the class BoardView method getClosestSnapColumn.

private int getClosestSnapColumn() {
    int column = 0;
    int minDiffX = Integer.MAX_VALUE;
    for (int i = 0; i < mLists.size(); i++) {
        View listParent = (View) mLists.get(i).getParent();
        int diffX = 0;
        switch(mSnapPosition) {
            case LEFT:
                int leftPosX = getScrollX();
                diffX = Math.abs(listParent.getLeft() - leftPosX);
                break;
            case CENTER:
                int middlePosX = getScrollX() + getMeasuredWidth() / 2;
                diffX = Math.abs(listParent.getLeft() + mColumnWidth / 2 - middlePosX);
                break;
            case RIGHT:
                int rightPosX = getScrollX() + getMeasuredWidth();
                diffX = Math.abs(listParent.getRight() - rightPosX);
                break;
        }
        if (diffX < minDiffX) {
            minDiffX = diffX;
            column = i;
        }
    }
    return column;
}
Also used : RecyclerView(android.support.v7.widget.RecyclerView) HorizontalScrollView(android.widget.HorizontalScrollView) View(android.view.View)

Example 78 with LEFT

use of android.support.v7.widget.helper.ItemTouchHelper.LEFT in project DragListView by woxblom.

the class BoardView method moveColumn.

private void moveColumn(final int fromIndex, final int toIndex) {
    DragItemRecyclerView list = mLists.remove(fromIndex);
    mLists.add(toIndex, list);
    View header = mHeaders.remove(fromIndex);
    mHeaders.add(toIndex, header);
    final View column1 = mColumnLayout.getChildAt(fromIndex);
    final View column2 = mColumnLayout.getChildAt(toIndex);
    mColumnLayout.removeViewAt(fromIndex);
    mColumnLayout.addView(column1, toIndex);
    mColumnLayout.addOnLayoutChangeListener(new OnLayoutChangeListener() {

        @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
            mColumnLayout.removeOnLayoutChangeListener(this);
            column2.setTranslationX(column2.getTranslationX() + column1.getLeft() - column2.getLeft());
            column2.animate().translationX(0).setDuration(350).start();
        }
    });
    if (mBoardListener != null) {
        mBoardListener.onColumnDragChangedPosition(fromIndex, toIndex);
    }
}
Also used : RecyclerView(android.support.v7.widget.RecyclerView) HorizontalScrollView(android.widget.HorizontalScrollView) View(android.view.View)

Example 79 with LEFT

use of android.support.v7.widget.helper.ItemTouchHelper.LEFT in project DragListView by woxblom.

the class BoardView method scrollToColumn.

public void scrollToColumn(int column, boolean animate) {
    if (mLists.size() <= column) {
        return;
    }
    View parent = (View) mLists.get(column).getParent();
    int newX = 0;
    switch(mSnapPosition) {
        case LEFT:
            newX = parent.getLeft();
            break;
        case CENTER:
            newX = parent.getLeft() - (getMeasuredWidth() - parent.getMeasuredWidth()) / 2;
            break;
        case RIGHT:
            newX = parent.getRight() - getMeasuredWidth();
            break;
    }
    int maxScroll = mRootLayout.getMeasuredWidth() - getMeasuredWidth();
    newX = newX < 0 ? 0 : newX;
    newX = newX > maxScroll ? maxScroll : newX;
    if (getScrollX() != newX) {
        mScroller.forceFinished(true);
        if (animate) {
            mScroller.startScroll(getScrollX(), getScrollY(), newX - getScrollX(), 0, SCROLL_ANIMATION_DURATION);
            ViewCompat.postInvalidateOnAnimation(this);
        } else {
            scrollTo(newX, getScrollY());
        }
    }
    int oldColumn = mCurrentColumn;
    mCurrentColumn = column;
    if (mBoardListener != null && oldColumn != mCurrentColumn) {
        mBoardListener.onFocusedColumnChanged(oldColumn, mCurrentColumn);
    }
}
Also used : RecyclerView(android.support.v7.widget.RecyclerView) HorizontalScrollView(android.widget.HorizontalScrollView) View(android.view.View)

Example 80 with LEFT

use of android.support.v7.widget.helper.ItemTouchHelper.LEFT in project AgileDev by LZ9.

the class GridItemDecoration method drawRightDivider.

/**
 * 绘制右侧分割线
 * @param canvas 画布
 * @param parent 父控件
 * @param childCount 子项数量
 * @param px 间距
 * @param paint 画笔
 */
private void drawRightDivider(Canvas canvas, RecyclerView parent, int childCount, int px, Paint paint) {
    for (int i = 0; i < childCount; i++) {
        View view = parent.getChildAt(i);
        int top = view.getTop();
        int bottom = view.getBottom();
        int left = view.getRight();
        int right = view.getRight() + px;
        canvas.drawRect(checkValue(left), checkValue(top), checkValue(right), checkValue(bottom), paint);
    }
}
Also used : RecyclerView(android.support.v7.widget.RecyclerView) View(android.view.View) Paint(android.graphics.Paint)

Aggregations

View (android.view.View)291 RecyclerView (android.support.v7.widget.RecyclerView)276 Paint (android.graphics.Paint)43 TextView (android.widget.TextView)36 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)22 ImageView (android.widget.ImageView)20 Rect (android.graphics.Rect)11 Intent (android.content.Intent)9 SuppressLint (android.annotation.SuppressLint)8 OnLayoutChangeListener (android.view.View.OnLayoutChangeListener)8 OrientationHelperEx (com.alibaba.android.vlayout.OrientationHelperEx)8 ArrayList (java.util.ArrayList)8 AlertDialog (android.support.v7.app.AlertDialog)7 Toolbar (android.support.v7.widget.Toolbar)7 ViewGroup (android.view.ViewGroup)7 GridLayoutManager (android.support.v7.widget.GridLayoutManager)6 Button (android.widget.Button)6 Animator (android.animation.Animator)5 TargetApi (android.annotation.TargetApi)5 Activity (android.app.Activity)5