Java Code Examples for androidx.recyclerview.widget.RecyclerView#getPaddingTop()
The following examples show how to use
androidx.recyclerview.widget.RecyclerView#getPaddingTop() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: DividerItemDecoration.java From RecyclerViewExtensions with MIT License | 6 votes |
public void drawHorizontal(Canvas canvas, RecyclerView parent) { int top = parent.getPaddingTop(); int bottom = parent.getHeight() - parent.getPaddingBottom(); int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); if (!hasDivider(parent, child)) { continue; } if (mDrawable.isStateful()) { mDrawable.setState(child.getDrawableState()); } RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int left = child.getRight() + params.rightMargin + Math.round(child.getTranslationX()); int right = left + mDrawable.getIntrinsicWidth(); drawDivider(canvas, left, top, right, bottom, child.getAlpha()); } }
Example 2
Source File: GridSpacingItemDecoration.java From a with GNU General Public License v3.0 | 6 votes |
private void drawVertical(Canvas canvas, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom(); final int childSize = parent.getChildCount(); for (int i = 0; i < childSize; i++) { final View child = parent.getChildAt(i); RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams(); final int left = child.getRight() + layoutParams.rightMargin; final int right = left + space; if (mDivider != null) { mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } if (mPaint != null) { canvas.drawRect(left, top, right, bottom, mPaint); } } }
Example 3
Source File: DividerItemDecoration.java From WidgetCase with Apache License 2.0 | 6 votes |
private void drawHorizontal(Canvas canvas, RecyclerView parent) { canvas.save(); final int top; final int bottom; //noinspection AndroidLintNewApi - NewApi lint fails to handle overrides. if (parent.getClipToPadding()) { top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom(); canvas.clipRect(parent.getPaddingLeft(), top, parent.getWidth() - parent.getPaddingRight(), bottom); } else { top = 0; bottom = parent.getHeight(); } final int childCount = parent.getChildCount(); for (int i = 0; i < childCount - 1; i++) { final View child = parent.getChildAt(i); parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds); final int right = mBounds.right + Math.round(child.getTranslationX()); final int left = right - mDivider.getIntrinsicWidth(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } canvas.restore(); }
Example 4
Source File: DividerItemDecoration.java From libcommon with Apache License 2.0 | 6 votes |
protected void drawHorizontal(final Canvas canvas, final RecyclerView parent) { final RecyclerView.LayoutManager manager = parent.getLayoutManager(); final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount() - 1; for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); if (hasDivider(child)) { final int left = child.getLeft(); final int right = left + mDivider.getIntrinsicWidth(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } } }
Example 5
Source File: CustomDividerItemDecoration.java From Android-skin-support with MIT License | 6 votes |
@SuppressLint("NewApi") private void drawHorizontal(Canvas canvas, RecyclerView parent) { canvas.save(); final int top; final int bottom; if (parent.getClipToPadding()) { top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom(); canvas.clipRect(parent.getPaddingLeft(), top, parent.getWidth() - parent.getPaddingRight(), bottom); } else { top = 0; bottom = parent.getHeight(); } final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds); final int right = mBounds.right + Math.round(ViewCompat.getTranslationX(child)); final int left = right - mDivider.getIntrinsicWidth(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } canvas.restore(); }
Example 6
Source File: HeaderRenderer.java From UltimateRecyclerView with Apache License 2.0 | 6 votes |
/** * Gets a clipping rect for the header based on the margins of the header and the padding of the * recycler. * FIXME: Currently right margin in VERTICAL orientation and bottom margin in HORIZONTAL * orientation are clipped so they look accurate, but the headers are not being drawn at the * correctly smaller width and height respectively. * * @param recyclerView for which to provide a header * @param header for clipping * @return a {@link Rect} for clipping a provided header to the padding of a recycler view */ private Rect getClipRectForHeader(RecyclerView recyclerView, View header) { Rect headerMargins = mDimensionCalculator.getMargins(header); if (mOrientationProvider.getOrientation(recyclerView) == LinearLayout.VERTICAL) { return new Rect( recyclerView.getPaddingLeft(), recyclerView.getPaddingTop(), recyclerView.getWidth() - recyclerView.getPaddingRight() - headerMargins.right, recyclerView.getHeight() - recyclerView.getPaddingBottom()); } else { return new Rect( recyclerView.getPaddingLeft(), recyclerView.getPaddingTop(), recyclerView.getWidth() - recyclerView.getPaddingRight(), recyclerView.getHeight() - recyclerView.getPaddingBottom() - headerMargins.bottom); } }
Example 7
Source File: DividerItemDecorationEx.java From NGA-CLIENT-VER-OPEN-SOURCE with GNU General Public License v2.0 | 6 votes |
private void drawHorizontal(Canvas canvas, RecyclerView parent) { canvas.save(); int top; int bottom; if (parent.getClipToPadding()) { top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom(); canvas.clipRect(parent.getPaddingLeft(), top, parent.getWidth() - parent.getPaddingRight(), bottom); } else { top = 0; bottom = parent.getHeight(); } int childCount = parent.getChildCount(); for (int i = 0; i < childCount; ++i) { View child = parent.getChildAt(i); parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds); int right = mBounds.right + Math.round(child.getTranslationX()); int left = right - mDivider.getIntrinsicWidth(); this.mDivider.setBounds(left, top, right, bottom); this.mDivider.draw(canvas); } canvas.restore(); }
Example 8
Source File: InstallerXAdapterDividerItemDecoration.java From SAI with GNU General Public License v3.0 | 6 votes |
private void drawHorizontal(Canvas canvas, RecyclerView parent) { canvas.save(); final int top; final int bottom; //noinspection AndroidLintNewApi - NewApi lint fails to handle overrides. if (parent.getClipToPadding()) { top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom(); canvas.clipRect(parent.getPaddingLeft(), top, parent.getWidth() - parent.getPaddingRight(), bottom); } else { top = 0; bottom = parent.getHeight(); } final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); parent.getLayoutManager().getDecoratedBoundsWithMargins(child, mBounds); final int right = mBounds.right + Math.round(child.getTranslationX()); final int left = right - mDivider.getIntrinsicWidth(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } canvas.restore(); }
Example 9
Source File: DividerItemDecoration.java From RvHelper with Apache License 2.0 | 5 votes |
public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } }
Example 10
Source File: ItemTouchHelperExtension.java From CrazyDaily with Apache License 2.0 | 5 votes |
/** * Called when {@link #onMove(RecyclerView, ViewHolder, ViewHolder)} returns true. * <p> * ItemTouchHelper does not create an extra Bitmap or View while dragging, instead, it * modifies the existing View. Because of this reason, it is important that the View is * still part of the layout after it is moved. This may not work as intended when swapped * Views are close to RecyclerView bounds or there are gaps between them (e.g. other Views * which were not eligible for dropping over). * <p> * This method is responsible to give necessary hint to the LayoutManager so that it will * keep the View in visible area. For example, for LinearLayoutManager, this is as simple * <p> * <p> * Default implementation calls {@link RecyclerView#scrollToPosition(int)} if the View's * new position is likely to be out of bounds. * <p> * It is important to ensure the ViewHolder will stay visible as otherwise, it might be * removed by the LayoutManager if the move causes the View to go out of bounds. In that * case, drag will end prematurely. * * @param recyclerView The RecyclerView controlled by the ItemTouchHelper. * @param viewHolder The ViewHolder under user's control. * @param fromPos The previous adapter position of the dragged item (before it was * moved). * @param target The ViewHolder on which the currently active item has been dropped. * @param toPos The new adapter position of the dragged item. * @param x The updated left value of the dragged View after drag translations * are applied. This value does not include margins added by * {@link RecyclerView.ItemDecoration}s. * @param y The updated top value of the dragged View after drag translations * are applied. This value does not include margins added by * {@link RecyclerView.ItemDecoration}s. */ public void onMoved(final RecyclerView recyclerView, final ViewHolder viewHolder, int fromPos, final ViewHolder target, int toPos, int x, int y) { final RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManager instanceof ViewDropHandler) { ((ViewDropHandler) layoutManager).prepareForDrop(viewHolder.itemView, target.itemView, x, y); return; } // if layout manager cannot handle it, do some guesswork if (layoutManager.canScrollHorizontally()) { final int minLeft = layoutManager.getDecoratedLeft(target.itemView); if (minLeft <= recyclerView.getPaddingLeft()) { recyclerView.scrollToPosition(toPos); } final int maxRight = layoutManager.getDecoratedRight(target.itemView); if (maxRight >= recyclerView.getWidth() - recyclerView.getPaddingRight()) { recyclerView.scrollToPosition(toPos); } } if (layoutManager.canScrollVertically()) { final int minTop = layoutManager.getDecoratedTop(target.itemView); if (minTop <= recyclerView.getPaddingTop()) { recyclerView.scrollToPosition(toPos); } final int maxBottom = layoutManager.getDecoratedBottom(target.itemView); if (maxBottom >= recyclerView.getHeight() - recyclerView.getPaddingBottom()) { recyclerView.scrollToPosition(toPos); } } }
Example 11
Source File: HorizonRecyclerDivider.java From sa-sdk-android with Apache License 2.0 | 5 votes |
public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } }
Example 12
Source File: DividerItemDecoration.java From MyBookshelf with GNU General Public License v3.0 | 5 votes |
public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDrawable.getIntrinsicHeight(); mDrawable.setBounds(left, top, right, bottom); mDrawable.draw(c); } }
Example 13
Source File: SelectiveDividerItemDecoration.java From CommonUtils with Apache License 2.0 | 5 votes |
private void drawHorizontal(Canvas canvas, RecyclerView parent) { canvas.save(); int top; int bottom; if (parent.getClipToPadding()) { top = parent.getPaddingTop(); bottom = parent.getHeight() - parent.getPaddingBottom(); canvas.clipRect(parent.getPaddingLeft(), top, parent.getWidth() - parent.getPaddingRight(), bottom); } else { top = 0; bottom = parent.getHeight(); } RecyclerView.LayoutManager lm = parent.getLayoutManager(); if (lm == null) return; int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { if (isDecorated(i)) { View child = parent.getChildAt(i); lm.getDecoratedBoundsWithMargins(child, mBounds); int right = mBounds.right + Math.round(child.getTranslationX()); int left = right - mDivider.getIntrinsicWidth(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } } canvas.restore(); }
Example 14
Source File: DividerItemDecorationUtils.java From shinny-futures-android with GNU General Public License v3.0 | 5 votes |
private void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } }
Example 15
Source File: DividerItemDecoration.java From android-test with Apache License 2.0 | 5 votes |
public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } }
Example 16
Source File: WeSwipeHelper.java From monero-wallet-android-app with MIT License | 5 votes |
/** * Called when {@link #onMove(RecyclerView, RecyclerView.ViewHolder, RecyclerView.ViewHolder)} returns true. * <p> * WeSwipeHelper does not create an extra Bitmap or View while dragging, instead, it * modifies the existing View. Because of this reason, it is important that the View is * still part of the layout after it is moved. This may not work as intended when swapped * Views are close to RecyclerView bounds or there are gaps between them (e.g. other Views * which were not eligible for dropping over). * <p> * This method is responsible to give necessary hint to the LayoutManager so that it will * keep the View in visible area. For example, for LinearLayoutManager, this is as simple * as calling {@link LinearLayoutManager#scrollToPositionWithOffset(int, int)}. * <p> * Default implementation calls {@link RecyclerView#scrollToPosition(int)} if the View's * new position is likely to be out of bounds. * <p> * It is important to ensure the ViewHolder will stay visible as otherwise, it might be * removed by the LayoutManager if the move causes the View to go out of bounds. In that * case, drag will end prematurely. * * @param recyclerView The RecyclerView controlled by the WeSwipeHelper. * @param viewHolder The ViewHolder under user's control. * @param fromPos The previous adapter position of the dragged item (before it was * moved). * @param target The ViewHolder on which the currently active item has been dropped. * @param toPos The new adapter position of the dragged item. * @param x The updated left value of the dragged View after drag translations * are applied. This value does not include margins added by * {@link RecyclerView.ItemDecoration}s. * @param y The updated top value of the dragged View after drag translations * are applied. This value does not include margins added by * {@link RecyclerView.ItemDecoration}s. */ public void onMoved(final RecyclerView recyclerView, final RecyclerView.ViewHolder viewHolder, int fromPos, final RecyclerView.ViewHolder target, int toPos, int x, int y) { final RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManager instanceof WeSwipeHelper.ViewDropHandler) { ((WeSwipeHelper.ViewDropHandler) layoutManager).prepareForDrop(viewHolder.itemView, target.itemView, x, y); return; } // if layout manager cannot handle it, do some guesswork if (layoutManager.canScrollHorizontally()) { final int minLeft = layoutManager.getDecoratedLeft(target.itemView); if (minLeft <= recyclerView.getPaddingLeft()) { recyclerView.scrollToPosition(toPos); } final int maxRight = layoutManager.getDecoratedRight(target.itemView); if (maxRight >= recyclerView.getWidth() - recyclerView.getPaddingRight()) { recyclerView.scrollToPosition(toPos); } } if (layoutManager.canScrollVertically()) { final int minTop = layoutManager.getDecoratedTop(target.itemView); if (minTop <= recyclerView.getPaddingTop()) { recyclerView.scrollToPosition(toPos); } final int maxBottom = layoutManager.getDecoratedBottom(target.itemView); if (maxBottom >= recyclerView.getHeight() - recyclerView.getPaddingBottom()) { recyclerView.scrollToPosition(toPos); } } }
Example 17
Source File: StickyHeaderDecoration.java From GetApk with MIT License | 4 votes |
protected void createPinnedHeader(RecyclerView parent) { updateStickyHeader(parent); RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager == null || layoutManager.getChildCount() <= 0) { return; } int firstVisiblePosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); int firstCompletelyVisiblePosition = ((LinearLayoutManager) layoutManager).findFirstCompletelyVisibleItemPosition(); int headerPosition = findStickyHeaderPosition(parent, firstVisiblePosition); if (headerPosition == -1 || (headerPosition == firstCompletelyVisiblePosition)) { resetPinnedHeader(); return; } if (headerPosition >= 0 && mHeaderPosition != headerPosition) { mHeaderPosition = headerPosition; int viewType = mAdapter.getItemViewType(headerPosition); mCurrentItemType = viewType; RecyclerView.ViewHolder stickyViewHolder = mAdapter.createViewHolder(parent, viewType); if (mAdapter instanceof SwipeStickyAdapter) { ((SwipeStickyAdapter) mAdapter).onBindSwipeViewHolder(stickyViewHolder, headerPosition); } else { mAdapter.onBindViewHolder(stickyViewHolder, headerPosition); } mStickyView = stickyViewHolder.itemView; // read layout parameters ViewGroup.LayoutParams layoutParams = mStickyView.getLayoutParams(); if (layoutParams == null) { layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); mStickyView.setLayoutParams(layoutParams); } int heightMode = View.MeasureSpec.getMode(layoutParams.height); int heightSize = View.MeasureSpec.getSize(layoutParams.height); if (heightMode == View.MeasureSpec.UNSPECIFIED) { heightMode = View.MeasureSpec.EXACTLY; } int maxHeight = parent.getHeight() - parent.getPaddingTop() - parent.getPaddingBottom(); if (heightSize > maxHeight) { heightSize = maxHeight; } // measure & layout int ws = View.MeasureSpec.makeMeasureSpec(parent.getWidth() - parent.getPaddingLeft() - parent.getPaddingRight(), View.MeasureSpec.EXACTLY); int hs = View.MeasureSpec.makeMeasureSpec(heightSize, heightMode); mStickyView.measure(ws, hs); mStickyView.layout(0, 0, mStickyView.getMeasuredWidth(), mStickyView.getMeasuredHeight()); } }
Example 18
Source File: GroupItemDecoration.java From CalendarView with Apache License 2.0 | 4 votes |
/** * 绘制悬浮组 * * @param c Canvas * @param parent RecyclerView */ protected void onDrawOverGroup(Canvas c, RecyclerView parent) { int firstVisiblePosition = ((LinearLayoutManager) parent.getLayoutManager()).findFirstVisibleItemPosition(); if (firstVisiblePosition == RecyclerView.NO_POSITION) { return; } Group group = getCroup(firstVisiblePosition); if (group == null) return; String groupTitle = group.toString(); if (TextUtils.isEmpty(groupTitle)) { return; } boolean isRestore = false; Group nextGroup = getCroup(firstVisiblePosition + 1); if (nextGroup != null && !group.equals(nextGroup)) { //说明是当前组最后一个元素,但不一定碰撞了 View child = parent.findViewHolderForAdapterPosition(firstVisiblePosition).itemView; if (child.getTop() + child.getMeasuredHeight() < mGroupHeight) { //进一步检测碰撞 c.save();//保存画布当前的状态 isRestore = true; c.translate(0, child.getTop() + child.getMeasuredHeight() - mGroupHeight); } } int left = parent.getPaddingLeft(); int right = parent.getWidth() - parent.getPaddingRight(); int top = parent.getPaddingTop(); int bottom = top + mGroupHeight; c.drawRect(left, top, right, bottom, mBackgroundPaint); float x; float y = top + mTextBaseLine; if (isCenter) { x = parent.getMeasuredWidth() / 2 - getTextX(groupTitle); } else { x = mPaddingLeft; } c.drawText(groupTitle, x, y, mTextPaint); if (isRestore) { //还原画布为初始状态 c.restore(); } }
Example 19
Source File: FollowingItemDecoration.java From Mysplash with GNU Lesser General Public License v3.0 | 4 votes |
@Override public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager == null) { return; } FollowingAdapter adapter = (FollowingAdapter) parent.getAdapter(); if (adapter == null) { return; } parentPaddingLeft = parent.getPaddingLeft(); parentPaddingRight = parent.getPaddingRight(); parentPaddingTop = parent.getPaddingTop(); parentPaddingBottom = parent.getPaddingBottom(); insets = getWindowInset(parent); if (parentPaddingLeft != insets.left || parentPaddingRight != insets.right || parentPaddingTop != 0 || parentPaddingBottom != insets.bottom) { setParentPadding(parent, insets); } StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams(); int spanCount = ((StaggeredGridLayoutManager) layoutManager).getSpanCount(); int spanIndex = params.getSpanIndex(); if (adapter.isPhotoItem(params.getViewAdapterPosition())) { if (spanCount == 1) { outRect.set( marginSingleSpanPhoto.left, 0, marginSingleSpanPhoto.right, marginSingleSpanPhoto.bottom ); } else { if (spanIndex == 0) { outRect.set(marginGridItem, 0, marginGridItem, marginGridItem); } else { outRect.set(0, 0, marginGridItem, marginGridItem); } } } }
Example 20
Source File: ItemTouchHelper.java From Carbon with Apache License 2.0 | 3 votes |
/** * Called when {@link #onMove(RecyclerView, ViewHolder, ViewHolder)} returns true. * <p> * ItemTouchHelper does not create an extra Bitmap or View while dragging, instead, it * modifies the existing View. Because of this reason, it is important that the View is * still part of the layout after it is moved. This may not work as intended when swapped * Views are close to RecyclerView bounds or there are gaps between them (e.g. other Views * which were not eligible for dropping over). * <p> * This method is responsible to give necessary hint to the LayoutManager so that it will * keep the View in visible area. For example, for LinearLayoutManager, this is as simple as * calling {@link LinearLayoutManager#scrollToPositionWithOffset(int, int)}. * <p> * Default implementation calls {@link RecyclerView#scrollToPosition(int)} if the View's new * position is likely to be out of bounds. * <p> * It is important to ensure the ViewHolder will stay visible as otherwise, it might be * removed by the LayoutManager if the move causes the View to go out of bounds. In that * case, drag will end prematurely. * * @param recyclerView The RecyclerView controlled by the ItemTouchHelper. * @param viewHolder The ViewHolder under user's control. * @param fromPos The previous adapter position of the dragged item (before it was * moved). * @param target The ViewHolder on which the currently active item has been dropped. * @param toPos The new adapter position of the dragged item. * @param x The updated left value of the dragged View after drag translations * are applied. This value does not include margins added by {@link * RecyclerView.ItemDecoration}s. * @param y The updated top value of the dragged View after drag translations are * applied. This value does not include margins added by {@link * RecyclerView.ItemDecoration}s. */ public void onMoved(final RecyclerView recyclerView, final ViewHolder viewHolder, int fromPos, final ViewHolder target, int toPos, int x, int y) { final RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); if (layoutManager instanceof ViewDropHandler) { ((ViewDropHandler) layoutManager).prepareForDrop(viewHolder.itemView, target.itemView, x, y); return; } // if layout manager cannot handle it, do some guesswork if (layoutManager.canScrollHorizontally()) { final int minLeft = layoutManager.getDecoratedLeft(target.itemView); if (minLeft <= recyclerView.getPaddingLeft()) { recyclerView.scrollToPosition(toPos); } final int maxRight = layoutManager.getDecoratedRight(target.itemView); if (maxRight >= recyclerView.getWidth() - recyclerView.getPaddingRight()) { recyclerView.scrollToPosition(toPos); } } if (layoutManager.canScrollVertically()) { final int minTop = layoutManager.getDecoratedTop(target.itemView); if (minTop <= recyclerView.getPaddingTop()) { recyclerView.scrollToPosition(toPos); } final int maxBottom = layoutManager.getDecoratedBottom(target.itemView); if (maxBottom >= recyclerView.getHeight() - recyclerView.getPaddingBottom()) { recyclerView.scrollToPosition(toPos); } } }