转载请声明出处http://blog.csdn.net/simon_yuyu/article/details/50924870
这是本人第一次写博客,不好的地方,望各位大神多多指教!
好了进入正题,平常大家想实现瀑布流的时候,第一想到的就是重写控件,来达到瀑布流效果,自从了解到了 RecyclerView 后,才发现实现这个效果就需要一行代码就可以搞定,是不是很惊讶,好了,先上代码来验证一下!`package com.example.administrator.stageredgriddemo;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
public class MainActivity extends Activity {
private RecyclerView recyclerView;
private ReCycAdapter mAdapter;
private ArrayList<String> mDatas;
String[] urls = {"http://img4.duitang.com/uploads/item/201511/02/20151102130410_Mds2x.thumb.700_0.jpeg",
"http://img5.duitang.com/uploads/item/201409/13/20140913141545_E3xtA.thumb.700_0.jpeg",
"http://d.3987.com/yjyy_131018/001.jpg",
"http://img4.duitang.com/uploads/item/201411/30/20141130160518_FzGfQ.jpeg"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) this.findViewById(R.id.recyclerview);
//添加显示的图片链接
mDatas = new ArrayList<String>();
for (int i = 0; i < 30; i++) {
if (i % 4 == 0) {
mDatas.add(urls[1]);
} else if (i % 4 == 1) {
mDatas.add(urls[2]);
} else if (i % 4 == 2) {
mDatas.add(urls[3]);
} else {
mDatas.add(urls[0]);
}
}
// recyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置布局为3列,垂直显示
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);
//设置item的间隔
SpacesItemDecoration decoration = new SpacesItemDecoration(10);
recyclerView.addItemDecoration(decoration);
recyclerView.setAdapter(new ReCycAdapter());
}
//recyclerView适配器
class ReCycAdapter extends RecyclerView.Adapter<ReCycAdapter.MyViewHolder>{
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, final int i) {
//创建视图
View view = LayoutInflater.from(getApplication()).inflate(R.layout.item_info, viewGroup, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder viewHolder, final int i) {
//控件在这做相应的处理
//点击当前item,查看大图
viewHolder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//把显示图片的链接加入到list中和当前位置,传递给查看大图界面
Intent intent = new Intent(getApplication(), LookImage.class);
intent.putStringArrayListExtra("lookimages", mDatas);
intent.putExtra("lookimage_index", i);
startActivity(intent);
}
});
//加载图片
Picasso.with(getApplication()).load(mDatas.get(i)).into(viewHolder.tv);
}
@Override
public int getItemCount() {
return mDatas.size();
}
//定义控件管理
class MyViewHolder extends RecyclerView.ViewHolder {
ImageView tv;