RecyclerView实现瀑布流效果(二)

在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager。其中StaggeredGridLayoutManager可实现交错式网格布局,正好可以用来实现瀑布流。

下面先看看效果图吧,再贴代码:

其中大部分内容实现其实是和上篇文章是一样的,就不多叙述了,就一个地方不同,就是我们在适配器中绑定ViewHolder的方法中需要重新给我们的itemView布局设置height,我这里是生成随机数来设置高度的,代码实现为:

private void getRandomHeight(List<String> lists){//得到随机item的高度heights = new ArrayList<>();for (int i = 0; i < lists.size(); i++) {heights.add((int)(200+Math.random()*400));}}在onBindViewHolder方法中:

<span style="font-size:14px;"> ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();//得到item的LayoutParams布局参数 params.height = heights.get(position);//把随机的高度赋予itemView布局 holder.itemView.setLayoutParams(params);//把params设置给itemView布局</span>从而实现瀑布流效果。

贴一下代码吧:

MainActivity.java

public class MainActivity extends AppCompatActivity {private RecyclerView mRecyclerView;private List<String> lists;private MyRecyclerAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();mRecyclerView = (RecyclerView) this.findViewById(R.id.recyclerView);mRecyclerView.setItemAnimator(new DefaultItemAnimator());//mRecyclerView.addItemDecoration();//设置分割线mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));//设置RecyclerView布局管理器为2列垂直排布adapter = new MyRecyclerAdapter(this,lists);mRecyclerView.setAdapter(adapter);adapter.setOnClickListener(new MyRecyclerAdapter.OnItemClickListener() {@Overridepublic void ItemClickListener(View view, int postion) {Toast.makeText(MainActivity.this,"点击了:"+postion,Toast.LENGTH_SHORT).show();}@Overridepublic void ItemLongClickListener(View view, int postion) {//长按删除lists.remove(postion);adapter.notifyItemRemoved(postion);}});}private void initData() {lists = new ArrayList();for (int i = 0; i < 100; i++) {lists.add("" + i);}}}MyRecyclerAdapter.java

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyViewHolder> {private List<String> lists;private Context context;private List<Integer> heights;private OnItemClickListener mListener;public MyRecyclerAdapter(Context context,List<String> lists) {this.context = context;this.lists = lists;getRandomHeight(this.lists);}private void getRandomHeight(List<String> lists){//得到随机item的高度heights = new ArrayList<>();for (int i = 0; i < lists.size(); i++) {heights.add((int)(200+Math.random()*400));}}public interface OnItemClickListener{void ItemClickListener(View view,int postion);void ItemLongClickListener(View view,int postion);}public void setOnClickListener(OnItemClickListener listener){this.mListener = listener;}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(context).inflate(R.layout.item,parent,false);MyViewHolder viewHolder = new MyViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(final MyViewHolder holder, int position) {ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();//得到item的LayoutParams布局参数params.height = heights.get(position);//把随机的高度赋予item布局holder.itemView.setLayoutParams(params);//把params设置给item布局holder.mTv.setText(lists.get(position));//为控件绑定数据if(mListener!=null){//如果设置了监听那么它就不为空,然后回调相应的方法holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int pos = holder.getLayoutPosition();//得到当前点击item的位置posmListener.ItemClickListener(holder.itemView,pos);//把事件交给我们实现的接口那里处理}});holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {int pos = holder.getLayoutPosition();//得到当前点击item的位置posmListener.ItemLongClickListener(holder.itemView,pos);//把事件交给我们实现的接口那里处理return true;}});}}@Overridepublic int getItemCount() {return lists.size();}}class MyViewHolder extends RecyclerView.ViewHolder{TextView mTv;public MyViewHolder(View itemView) {super(itemView);mTv = (TextView) itemView.findViewById(R.id.textView);}}

源码下载地址:

转载请注明出处-

版权声明:本文为博主原创文章,,未经博主允许不得转载。

便觉不过如此。也许我们只是想让自己的心去旅行,

RecyclerView实现瀑布流效果(二)

相关文章:

你感兴趣的文章:

标签云: