现在更好的方式是使用SnapHelper 在RecyclerView 24.2.0 支持库之后添加使用方法
需要实现的功能
这里只实现回弹的效果 和 在一个宽度内显示2个半item的效果。
分析
下面是需要实现的效果:
1.看起来就是一个横向的ListView
,现在有我们可以容易的使用RecyclerView
并配合LinearLayoutManager
实现一个横向的ListView
2.需要支持回弹效果,RecyclerView
本身拥有的scrollToPosition(int targetPosition)
及 smoothScrollToPosition(int targetPosition)
,目前看来很简单。
实现
好吧,看起来没什么可分析的。为了方便使用 自定义一个HorizontalRecyclerView
继承自 RecyclerView
。
HorizontalRecyclerView
public class HorizontalRecyclerView extends RecyclerView {
private LinearLayoutManager mLayoutManager;
public HorizontalRecyclerView(Context context) {
super(context);
init(context);
}
public HorizontalRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public HorizontalRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context){
mLayoutManager = new LinearLayoutManager(context);//自定义的LinearLayoutManager extends LinearLayoutManager
mLayoutManager.setOrientation(android.support.v7.widget.LinearLayoutManager.HORIZONTAL);
setLayoutManager(mLayoutManager);
addOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
switch (newState){
case SCROLL_STATE_IDLE://
int firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition();
int firstCompletelyVisibleItem = mLayoutManager.findFirstCompletelyVisibleItemPosition();