private int getListTop(RecyclerView view) { if (view.getLayoutManager().getClipToPadding()) { return view.getPaddingTop(); } else { return 0; } }
public void setup( RecyclerView rv, RecyclerView.ViewHolder vh, DraggingItemInfo info, int lastTouchX, int lastTouchY, ItemDraggableRange wrappedAdapterPange, ItemDraggableRange rootAdapterRange, boolean checkCanSwap) { this.rv = rv; this.draggingItemInfo = info; this.draggingItem = vh; this.lastTouchX = lastTouchX; this.lastTouchY = lastTouchY; this.wrappedAdapterRange = wrappedAdapterPange; this.rootAdapterRange = rootAdapterRange; this.checkCanSwap = checkCanSwap; this.layoutType = CustomRecyclerViewUtils.getLayoutType(rv); this.vertical = CustomRecyclerViewUtils.extractOrientation(this.layoutType) == CustomRecyclerViewUtils.ORIENTATION_VERTICAL; this.overlayItemLeft = this.overlayItemLeftNotClipped = lastTouchX - info.grabbedPositionX; this.overlayItemTop = this.overlayItemTopNotClipped = lastTouchY - info.grabbedPositionY; if (this.vertical) { this.overlayItemLeft = Math.max(this.overlayItemLeft, rv.getPaddingLeft()); this.overlayItemLeft = Math.min(this.overlayItemLeft, Math.max(0, rv.getWidth() - rv.getPaddingRight() - draggingItemInfo.width)); } else { this.overlayItemTop = Math.max(this.overlayItemTop, rv.getPaddingTop()); this.overlayItemTop = Math.min(this.overlayItemTop, Math.max(0, rv.getHeight() - rv.getPaddingBottom() - draggingItemInfo.height)); } }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { // we want the grid to scroll over the top of the toolbar but for the toolbar items // to be clickable when visible. To achieve this we play games with elevation. The // toolbar is laid out in front of the grid but when we scroll, we lower it's elevation // to allow the content to pass in front (and reset when scrolled to top of the grid) if (newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager.findFirstVisibleItemPosition() == 0 && layoutManager.findViewByPosition(0).getTop() == grid.getPaddingTop() && toolbar.getTranslationZ() != 0) { // at top, reset elevation toolbar.setTranslationZ(0f); } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING && toolbar.getTranslationZ() != -1f) { // grid scrolled, lower toolbar to allow content to pass in front toolbar.setTranslationZ(-1f); } } };
case EDGE_TOP: if (clipToPadding) { c.translate(parent.getPaddingLeft(), parent.getPaddingTop()); c.rotate(-90); if (clipToPadding) { c.translate(-parent.getHeight() + parent.getPaddingTop(), parent.getPaddingLeft()); } else { c.translate(-parent.getHeight(), 0); c.rotate(90); if (clipToPadding) { c.translate(parent.getPaddingTop(), -parent.getWidth() + parent.getPaddingRight()); } else { c.translate(0, -parent.getWidth());
private static void updateGlowSize(RecyclerView rv, EdgeEffect glow, int dir) { int width = rv.getMeasuredWidth(); int height = rv.getMeasuredHeight(); if (getClipToPadding(rv)) { width -= rv.getPaddingLeft() + rv.getPaddingRight(); height -= rv.getPaddingTop() + rv.getPaddingBottom(); } width = Math.max(0, width); height = Math.max(0, height); if (dir == EDGE_LEFT || dir == EDGE_RIGHT) { int t = width; //noinspection SuspiciousNameCombination width = height; height = t; } glow.setSize(width, height); }
private boolean isStickyHeaderBeingPushedOffscreen(RecyclerView recyclerView, View stickyHeader) { View viewAfterHeader = getFirstViewUnobscuredByHeader(recyclerView, stickyHeader); int firstViewUnderHeaderPosition = recyclerView.getChildAdapterPosition(viewAfterHeader); if (firstViewUnderHeaderPosition == RecyclerView.NO_POSITION) { return false; } boolean isReverseLayout = mOrientationProvider.isReverseLayout(recyclerView); if (firstViewUnderHeaderPosition > 0 && hasNewHeader(firstViewUnderHeaderPosition, isReverseLayout)) { View nextHeader = mHeaderProvider.getHeader(recyclerView, firstViewUnderHeaderPosition); mDimensionCalculator.initMargins(mTempRect1, nextHeader); mDimensionCalculator.initMargins(mTempRect2, stickyHeader); if (mOrientationProvider.getOrientation(recyclerView) == LinearLayoutManager.VERTICAL) { int topOfNextHeader = viewAfterHeader.getTop() - mTempRect1.bottom - nextHeader.getHeight() - mTempRect1.top; int bottomOfThisHeader = recyclerView.getPaddingTop() + stickyHeader.getBottom() + mTempRect2.top + mTempRect2.bottom; if (topOfNextHeader < bottomOfThisHeader) { return true; } } else { int leftOfNextHeader = viewAfterHeader.getLeft() - mTempRect1.right - nextHeader.getWidth() - mTempRect1.left; int rightOfThisHeader = recyclerView.getPaddingLeft() + stickyHeader.getRight() + mTempRect2.left + mTempRect2.right; if (leftOfNextHeader < rightOfThisHeader) { return true; } } } return false; }
mTranslationTopLimit += rv.getPaddingTop(); mTranslationBottomLimit -= rv.getPaddingBottom(); mTranslationLeftLimit = -mDraggingItemInfo.width; mTranslationBottomLimit = mTranslationTopLimit = rv.getPaddingTop();
drawer.mRecyclerView.setPadding(drawer.mRecyclerView.getPaddingLeft(), drawer.mRecyclerView.getPaddingTop(), drawer.mRecyclerView.getPaddingRight(), ctx.getResources().getDimensionPixelSize(R.dimen.material_drawer_padding));
int parentTopPadding = mRecyclerView.getPaddingTop(); int itemTopMargin = ((RecyclerView.LayoutParams) vh.itemView.getLayoutParams()).topMargin; int offset = topMargin - parentTopPadding - itemTopMargin;
right = parent.getWidth() - parent.getPaddingRight(); } else { //horizontal top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom();
public void start(DraggingItemInfo draggingItemInfo, int touchX, int touchY) { if (mStarted) { return; } final View itemView = mDraggingItemViewHolder.itemView; mDraggingItemInfo = draggingItemInfo; mDraggingItemImage = createDraggingItemImage(itemView, mShadowDrawable); mTranslationLeftLimit = mRecyclerView.getPaddingLeft(); mTranslationTopLimit = mRecyclerView.getPaddingTop(); mLayoutOrientation = CustomRecyclerViewUtils.getOrientation(mRecyclerView); mLayoutType = CustomRecyclerViewUtils.getLayoutType(mRecyclerView); mInitialDraggingItemScaleX = itemView.getScaleX(); mInitialDraggingItemScaleY = itemView.getScaleY(); mLastDraggingItemScaleX = 1.0f; mLastDraggingItemScaleY = 1.0f; mLastDraggingItemRotation = 0.0f; mLastDraggingItemAlpha = 1.0f; // hide itemView.setVisibility(View.INVISIBLE); update(touchX, touchY, true); mRecyclerView.addItemDecoration(this); mStartMillis = System.currentTimeMillis(); mStarted = true; }
final int width = fc.rv.getWidth(); final int paddingLeft = (fc.vertical) ? fc.rv.getPaddingLeft() : 0; final int paddingTop = (!fc.vertical) ? fc.rv.getPaddingTop() : 0; final int paddingRight = (fc.vertical) ? fc.rv.getPaddingRight() : 0; final int paddingBottom = (!fc.vertical) ? fc.rv.getPaddingBottom() : 0;
@Override void scrollToPosition(RecyclerView list, int pos) { if (list.getLayoutManager() instanceof LinearLayoutManager) { // Centering item in its parent final LinearLayoutManager manager = (LinearLayoutManager) list.getLayoutManager(); final boolean isHorizontal = manager.getOrientation() == LinearLayoutManager.HORIZONTAL; int offset = isHorizontal ? (list.getWidth() - list.getPaddingLeft() - list.getPaddingRight()) / 2 : (list.getHeight() - list.getPaddingTop() - list.getPaddingBottom()) / 2; final RecyclerView.ViewHolder holder = list.findViewHolderForAdapterPosition(pos); if (holder != null) { final View view = holder.itemView; offset -= isHorizontal ? view.getWidth() / 2 : view.getHeight() / 2; } manager.scrollToPositionWithOffset(pos, offset); } else { list.scrollToPosition(pos); } }
/** * Saves current screen state: whether we are in a full image mode or not, as well as current * grid position. So that we can restore UI on configuration change. */ private void saveScreenState() { clearScreenState(); savedPhotoCount = gridAdapter.getCount(); savedPagerPosition = listAnimator.isLeaving() || pagerAdapter.getCount() == 0 ? NO_POSITION : views.pager.getCurrentItem(); if (views.grid.getChildCount() > 0) { View child = views.grid.getChildAt(0); savedGridPosition = views.grid.getChildAdapterPosition(child); savedGridPositionFromTop = child.getTop() - Views.getMarginParams(child).topMargin - views.grid.getPaddingTop(); } }
final int topDiff = curY - mTmpRect.top - mRecyclerView.getPaddingTop(); if (mDy < 0 && topDiff < 0) { scrollY = topDiff;
mRecyclerView.setPadding(mRecyclerView.getPaddingLeft(), mRecyclerView.getPaddingTop(), mRecyclerView.getPaddingRight(), UIUtils.getNavigationBarHeight(ctx));
if (minTop <= recyclerView.getPaddingTop()) { recyclerView.scrollToPosition(toPos);
filtersList.getPaddingTop() + insets.getSystemWindowInsetTop(), filtersList.getPaddingEnd() + (ltr ? insets.getSystemWindowInsetRight() : 0),
private void measureView(@NonNull RecyclerView parent, @NonNull View header) { int widthSpec = View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY); int heightSpec = View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.UNSPECIFIED); int childWidth = ViewGroup.getChildMeasureSpec(widthSpec, parent.getPaddingLeft() + parent.getPaddingRight(), header.getLayoutParams().width); int childHeight = ViewGroup.getChildMeasureSpec(heightSpec, parent.getPaddingTop() + parent.getPaddingBottom(), header.getLayoutParams().height); header.measure(childWidth, childHeight); header.layout(0, 0, header.getMeasuredWidth(), header.getMeasuredHeight()); }
int getAvailableScrollHeight() { int visibleHeight = materialScrollBar.recyclerView.getHeight(); int scrollHeight; if(customScroller != null) { scrollHeight = materialScrollBar.recyclerView.getPaddingTop() + customScroller.getTotalDepth() + materialScrollBar.recyclerView.getPaddingBottom(); } else { scrollHeight = materialScrollBar.recyclerView.getPaddingTop() + getRowCount() * scrollPosState.rowHeight + materialScrollBar.recyclerView.getPaddingBottom(); } return scrollHeight - visibleHeight; }