如何在点击时滚动水平回收视图?
How to scroll horizontal recyclerview on click?
实际上我想在水平 recyclerview
中添加一个这样的功能,如果它是最后一个位置,它会自动滚动到下一个位置,有时它必须前进,有时它必须向后退,就像instagram 的过滤器视图,通过点击自动滚动。我想知道如何执行此任务。目前按照我的逻辑,它只是向前滚动,但我不知道如何插入向后滚动的逻辑。
代码:
horzRview.addOnItemTouchListener(new RecyclerItemClickListener(ctx, horzRview, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if(position<adapter.getItemCount()-1)
horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position+1);
else horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position-1);
}
@Override
public void onLongItemClick(View view, int position) {
}
}));
public interface OnItemClickListener {
void onItemClick(View view , int position);
}
//in adapter class
public class Adpt extends
RecyclerView.Adapter<Adpt.ViewHolder> {
Context context;
OnItemClickListener onItemClickListener;
public Adpt(Context context,OnItemClickListener onItemClickListener) {
this.context = context;
this.onItemClickListener = onItemClickListener;
}
//put your click on itemview
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemClick(view,position);
}
});
//implement your interface when you will set your adapter
Adpt adpt = new Adpr(activity,new OnItemCLickListner(){
// put your logic here
});
使用首选项创建 SmoothScroller STAP_TO_START:
RecyclerView.SmoothScroller smoothScroller = new
LinearSmoothScroller(context) {
@Override protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_START;
}
};
现在你设置滚动的位置(项目的位置):
smoothScroller.setTargetPosition(position);
将 SmoothScroller 传递给 LayoutManager:
layoutManager.startSmoothScroll(smoothScroller);
我最后做了一个棘手的计算,即我通过对第一个和最后一个完全可见的项目进行平均来得到中间的完全可见的项目。然后我按如下方式应用我的逻辑:
代码:
horzRview.addOnItemTouchListener(new RecyclerItemClickListener(ctx, horzRview, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
int avg =
(layoutManager.findFirstCompletelyVisibleItemPosition()+(layoutManager.findFirstCompletelyVisibleItemPosition()+1)+
layoutManager.findLastCompletelyVisibleItemPosition())/3;
if(position>avg) horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position+1);
else if(position!=0) horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position-1);
else horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, 0);
}
@Override
public void onLongItemClick(View view, int position) {
}
}));
实际上我想在水平 recyclerview
中添加一个这样的功能,如果它是最后一个位置,它会自动滚动到下一个位置,有时它必须前进,有时它必须向后退,就像instagram 的过滤器视图,通过点击自动滚动。我想知道如何执行此任务。目前按照我的逻辑,它只是向前滚动,但我不知道如何插入向后滚动的逻辑。
代码:
horzRview.addOnItemTouchListener(new RecyclerItemClickListener(ctx, horzRview, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if(position<adapter.getItemCount()-1)
horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position+1);
else horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position-1);
}
@Override
public void onLongItemClick(View view, int position) {
}
}));
public interface OnItemClickListener {
void onItemClick(View view , int position);
}
//in adapter class
public class Adpt extends
RecyclerView.Adapter<Adpt.ViewHolder> {
Context context;
OnItemClickListener onItemClickListener;
public Adpt(Context context,OnItemClickListener onItemClickListener) {
this.context = context;
this.onItemClickListener = onItemClickListener;
}
//put your click on itemview
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemClick(view,position);
}
});
//implement your interface when you will set your adapter
Adpt adpt = new Adpr(activity,new OnItemCLickListner(){
// put your logic here
});
使用首选项创建 SmoothScroller STAP_TO_START:
RecyclerView.SmoothScroller smoothScroller = new
LinearSmoothScroller(context) {
@Override protected int getVerticalSnapPreference() {
return LinearSmoothScroller.SNAP_TO_START;
}
};
现在你设置滚动的位置(项目的位置):
smoothScroller.setTargetPosition(position);
将 SmoothScroller 传递给 LayoutManager:
layoutManager.startSmoothScroll(smoothScroller);
我最后做了一个棘手的计算,即我通过对第一个和最后一个完全可见的项目进行平均来得到中间的完全可见的项目。然后我按如下方式应用我的逻辑:
代码:
horzRview.addOnItemTouchListener(new RecyclerItemClickListener(ctx, horzRview, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
int avg =
(layoutManager.findFirstCompletelyVisibleItemPosition()+(layoutManager.findFirstCompletelyVisibleItemPosition()+1)+
layoutManager.findLastCompletelyVisibleItemPosition())/3;
if(position>avg) horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position+1);
else if(position!=0) horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, position-1);
else horzRview.getLayoutManager().smoothScrollToPosition(horzRview, null, 0);
}
@Override
public void onLongItemClick(View view, int position) {
}
}));