在support V4的最新包中,谷歌加入了一个叫做SnapHelper的辅助类。这个类的作用是可以让RecyclerView实现一些类似ViewPager的效果。我大致试了下,可以利用这个类实现滚轮选择效果。如果所示:
核心代码如下:
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
linearSnapHelper.attachToRecyclerView(mRecyclerView);
mAdapter = new RecyclerViewAdapter(this);
mRecyclerView.setAdapter(mAdapter);
其中Adapter代码如下:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private List<String> mDataList = new ArrayList<>();
private Context mContext;
public RecyclerViewAdapter(Context context) {
mContext = context;
for (int i = 0; i < 200; i++) {
mDataList.add("" + i);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View headerView = View.inflate(mContext, R.layout.item, null);
MyViewHolder headerHolder = new MyViewHolder(headerView);
return headerHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.textView.setText(mDataList.get(position));
}
@Override
public int getItemCount() {
return mDataList.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public MyViewHolder(View view) {
super(view);
textView = (TextView) view.findViewById(R.id.id_info);
}
}
}
item 的布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/left"
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true" />
<TextView
android:id="@+id/id_info"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_toLeftOf="@+id/right"
android:layout_toRightOf="@+id/left"
android:background="#ffcccc"
android:gravity="center"
android:text="北京"
android:textColor="#333333"
android:textSize="18dp" />
<View
android:id="@+id/right"
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true" />
</RelativeLayout>
补记:
系统还帮我们实现了一个PagerSnapHelper,可以用RecyclerView实现跟ViewPager一模一样的效果:
PagerSnapHelper linearSnapHelper = new PagerSnapHelper();具体的item 的XML 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffff">
<TextView
android:id="@+id/id_info"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
android:background="#ffcccc"
android:gravity="center"
android:text="北京"
android:textColor="#333333"
android:textSize="18dp" />
</RelativeLayout>