RecyclerView 点击 Item 后,Item移动到 View 中间

RecyclerView Item点击后显示到View中间,这个主要适用于视频剧集,综艺列表 Item 点击后显示到View 中间,这个主要是提升用户体验。具体实现列入下:

方法介绍

1.判断当前点击的 Item 是否可见

private boolean isVisible(int position) {//所点击的 Item是不是在屏幕位置中可见

final int firstPosition = mLinearLayoutManager.findFirstVisibleItemPosition();//第一个可见的Item 位置值

final int lastPosition = mLinearLayoutManager.findLastVisibleItemPosition();//最后一个可见的Item 位置值

return position <= lastPosition && position >= firstPosition;

}

2.Item 横向布局点击居中

Item中的点击事件调用此方法则,不在中间位置的View自动滚动到屏幕中间的位置

private void scrollToMiddleW(View view,int position) {

int vWidth = view.getWidth();

Rect rect = new Rect();

mRecyclerView.getGlobalVisibleRect(rect);

int reWidth = rect.right - rect.left - vWidth; //除掉点击View的宽度,剩下整个屏幕的宽度

final int firstPosition = mLinearLayoutManager.findFirstVisibleItemPosition();

int left = mRecyclerView.getChildAt(position - firstPosition).getLeft();//从左边到点击的Item的位置距离

int half = reWidth / 2;//半个屏幕的宽度

int moveDis = left - half;//向中间移动的距离

mRecyclerView.smoothScrollBy( moveDis,0);

}

3.Item 竖直布局点击居中

private void scrollToMiddleH(View view,int position) {

int vHeight = view.getHeight();

Rect rect = new Rect();

mRecyclerView.getGlobalVisibleRect(rect);

int reHeight = rect.top- rect.bottom - vHeight;

final int firstPosition = mLinearLayoutManager.findFirstVisibleItemPosition();

int top = mRecyclerView.getChildAt(position - firstPosition).getTop();

int half = reHeight / 2;

mRecyclerView.smoothScrollBy( 0,top - half);

}

方法使用

具体Item的点击事件实现不做详细介绍,简介如下:

1.书写Item 点击的监听器接口

public interface onItemCommonClickListener {

void onItemClickListener(View view, int position);

void onItemLongClickListener(View view, int position);

}

2.设置监听接口到Item

在RecyclerView中的adapter 给holder 或者Item设置监听,我以 holder 设置监听

onItemCommonClickListener mListener,

tvDramaHolder.setRecycleViewItemClickListener(mListener);

3.实现接口

public void onItemClickListener(View view, int position) {

if(isVisible(position)){

scrollToMiddleW(view,position);

}

}

更多问题请关注微信:

猜你喜欢

转载自blog.csdn.net/Ericafyl/article/details/82848722