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);
}
}
更多问题请关注微信: