Recycler实现瀑布流

来源:互联网 发布:java 守护进程 编辑:程序博客网 时间:2024/05/29 04:06

//首先是布局

<android.support.v7.widget.RecyclerView    android:id="@+id/recy"    android:layout_width="match_parent"    android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
//主界面

public class MainActivity extends AppCompatActivity {    private RecyclerView recyclerView;    private ArrayList<Bean> arrayList11;    private RecyclerAdapter<Bean> Textdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        recyclerView=(RecyclerView)findViewById(R.id.recy);        initdata();    }    private void initdata() {        arrayList11 = new ArrayList<>();        Bean bean = new Bean(R.mipmap.a, " ");        Bean bean1 = new Bean(R.mipmap.s, " ");        Bean bean2 = new Bean(R.mipmap.ss, " ");        Bean bean3 = new Bean(R.mipmap.kk, " ");        Bean bean4 = new Bean(R.mipmap.m, " ");        Bean bean5 = new Bean(R.mipmap.pp, " ");        Bean bean6 = new Bean(R.mipmap.vcaa, " ");        Bean bean7 = new Bean(R.mipmap.a33, " ");        Bean bean8 = new Bean(R.mipmap.d, " ");        Bean bean9 = new Bean(R.mipmap.w, " ");        arrayList11.add(bean);        arrayList11.add(bean1);        arrayList11.add(bean2);        arrayList11.add(bean3);        arrayList11.add(bean4);        arrayList11.add(bean5);        arrayList11.add(bean6);        arrayList11.add(bean7);        arrayList11.add(bean8);        arrayList11.add(bean9);        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));        recyclerView.setAdapter(Textdapter = new RecyclerAdapter<Bean>(MainActivity.this, arrayList11, R.layout.recyclervier_item) {            @Override            public void convert(RecyclerViewHolder holder, Bean data, int position) {                ImageView hon_img = holder.findView(R.id.item_icon);                hon_img.setImageResource(arrayList11.get(position).getImgid());            }            @Override            public void onBindViewHolder(RecyclerViewHolder holder, final int position) {                super.onBindViewHolder(holder, position);                holder.findView(R.id.item_icon).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View view) {                        Intent intent = new Intent(MainActivity.this, XiangqingActivity.class);                       /* intent.putExtra("img", arrayList11.get(position).getImgid());                        intent.putExtra("name", arrayList11.get(position).getName());*/                        startActivity(intent);                    }                });            }        });        //设置item之间的间隔        SpacesItemDecoration decoration = new SpacesItemDecoration(9);        recyclerView.addItemDecoration(decoration);    }}
//工具类设置图片之间的间隔
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.getChildAdapterPosition(view)==0){            outRect.top=space;        }    }}
//Recycler适配器可以一直用
public abstract class RecyclerAdapter<T>  extends RecyclerView.Adapter<RecyclerViewHolder> {    private Context mContext;    private List<T> mDatas;    private int mLayoutId;    private LayoutInflater mInflater;    private OnItemClickListener onItemClickListener;    public RecyclerAdapter(Context mContext, List<T> mDatas, int mLayoutId) {        this.mContext = mContext;        this.mDatas = mDatas;        this.mLayoutId = mLayoutId;        mInflater = LayoutInflater.from(mContext);    }    @Override    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //这里是创建ViewHolder的地方,RecyclerAdapter内部已经实现了ViewHolder的重用        //这里我们直接new就好了        return new RecyclerViewHolder(mInflater.inflate(mLayoutId, parent, false));    }    @Override    public void onBindViewHolder(final RecyclerViewHolder holder, int position) {        if (onItemClickListener != null) {            //设置背景            holder.itemView.setBackgroundResource(R.drawable.recycler_bg);            holder.itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    //注意,这里的position不要用上面参数中的position,会出现位置错乱                    onItemClickListener.OnItemClickListener(holder.itemView, holder.getLayoutPosition());                }            });        }        convert(holder, mDatas.get(position), position);    }    public abstract void convert(RecyclerViewHolder holder, T data, int position);    @Override    public int getItemCount() {        return mDatas.size();    }    /**自定义RecyclerView item的点击事件的点击事件*/    interface OnItemClickListener {        void OnItemClickListener(View view, int position);    }}
、、、、、、、、、、、、、、、、、、
public class RecyclerViewHolder extends RecyclerView.ViewHolder {    /** 用于存储当前item当中的View */    private SparseArray<View> mViews;    public RecyclerViewHolder(View itemView) {        super(itemView);        mViews = new SparseArray<View>();    }    public <T extends View> T findView(int ViewId) {        View view = mViews.get(ViewId);        //集合中没有,则从item当中获取,并存入集合当中        if (view == null) {            view = itemView.findViewById(ViewId);            mViews.put(ViewId, view);        }        return (T) view;    }    public RecyclerViewHolder setText(int viewId, String text) {        TextView tv = findView(viewId);        tv.setText(text);        return this;    }    public RecyclerViewHolder setText(int viewId, int text) {        TextView tv = findView(viewId);        tv.setText(text);        return this;    }    public RecyclerViewHolder setImageResource(int viewId, int ImageId) {        ImageView image = findView(viewId);        image.setImageResource(ImageId);        return this;    }    public RecyclerViewHolder setImageBitmap(int viewId, Bitmap bitmap) {        ImageView image = findView(viewId);        image.setImageBitmap(bitmap);        return this;    }    public RecyclerViewHolder setImageNet(int viewId, String url) {        ImageView image = findView(viewId);        //使用你所用的网络框架等        return this;    }}


0 0