實現瀑布流,步驟和listview差不多,詳情看:
http://blog.csdn.net/qq_18148011/article/details/52602096
主要不同的地方在於:
1、adapter,代碼如下
package com.yztc.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.yztc.android0801.R;
import com.yztc.tools.OnItemClickListener;
import java.util.ArrayList;
import java.util.List;
/**
* Created by ThinkPad-PC on 2016/9/20.
*/
public class MyStaggeredAdapter extends RecyclerView.Adapter<MyStaggeredAdapter.MyViewHolder> {
private List<String> list;
//模擬數據
private List<Integer> heights;
private Context context;
private OnItemClickListener listener;
public void setListener(OnItemClickListener listener) {
this.listener = listener;
}
public MyStaggeredAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
getRandomHeight(list);
}
//定義函數 採用隨機數定義item的高度
public void getRandomHeight(List<String> list) {
heights = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
heights.add((int) (Math.random() * 300 + 100));
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.staggered_item,parent,false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
if (params != null)
params.height = heights.get(position);
else{
Log.e("asd","sadsad");
}
holder.itemView.setLayoutParams(params);
holder.tv.setText(list.get(position));
if (listener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getLayoutPosition();
listener.OnItemClickListener(holder.itemView, pos);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int pos = holder.getLayoutPosition();
listener.OnItemLongClickListener(holder.itemView, pos);
return true;
}
});
}
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
}
2、在初始化的時候多一句:
recyclerView.addItemDecoration(new SpacesItemDecoration(15));
以下是SpacesItemDecoration的代碼
package com.yztc.tools;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* 設置item之間的分割空間
*/
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpacesItemDecoration(int space) {
this.space=space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
if(parent.getChildPosition(view) == 0 || parent.getChildPosition(view) == 1 || parent.getChildPosition(view) == 2 || parent.getChildPosition(view) == 3){
outRect.top = space;
}
}
}
完成: