首先建立一个 PbRecyclerViewActivity.java文件:

 1 public class PbRecyclerViewActivity extends AppCompatActivity {
2 private RecyclerView RVpb;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_pb_recycler_view);
7 RVpb=findViewById(R.id.rv_pb);
8 RVpb.addItemDecoration(new MyDecoration());//设置边框记得一定要加这个
9 RVpb.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
10 //是VERTICAL的话,数字代表列;如果是horizontal,数字代表行
11 //StaggeredGridLayoutManager是参差不齐的渲染,即瀑布流
12 RVpb.setAdapter(new StaggeredGridAdapter(PbRecyclerViewActivity.this, new StaggeredGridAdapter.OnItemClickListener() {
13 @Override
14 public void onClick(int pos) {
15 Toast.makeText(PbRecyclerViewActivity.this, "pick"+pos, Toast.LENGTH_SHORT).show();
16 }
17 }));//点击事件
18 }
19 class MyDecoration extends RecyclerView.ItemDecoration{
20 @Override
21 public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
22 super.getItemOffsets(outRect, view, parent, state);
23 int gap=getResources().getDimensionPixelOffset(R.dimen.deviderHeight2);
24 outRect.set(gap,gap,gap,gap);//设置边框
25 }
26 }
27 }

对应的activity_pb_recycler_view.xml文件:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent">
4
5 <androidx.recyclerview.widget.RecyclerView
6 android:id="@+id/rv_pb"
7 android:layout_width="match_parent"
8 android:layout_height="wrap_content"
9 android:background="@color/purple_200"/>
10 </LinearLayout>

然后建立适配器StaggeredGridAdapter.java文件:

 1 public class StaggeredGridAdapter extends RecyclerView.Adapter<StaggeredGridAdapter.LinearViewHolder>{
2 private Context mcontext;
3 private OnItemClickListener mlistener;
4 public StaggeredGridAdapter(Context context, OnItemClickListener listener){
5 this.mcontext=context;
6 this.mlistener=listener;
7 }
8 @NonNull
9 @Override
10 public StaggeredGridAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
11 return new LinearViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.layout_staggered_grid_recyclerview_item,parent,false));
12 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
13
14 @Override
15 public void onBindViewHolder(@NonNull StaggeredGridAdapter.LinearViewHolder holder, int position) {
16 if(position%2!=0){
17 holder.imageView.setImageResource(R.drawable.image1);
18 }else {
19 holder.imageView.setImageResource(R.drawable.image2);
20 }
21
22 holder.itemView.setOnClickListener(new View.OnClickListener() {
23 @Override
24 public void onClick(View view) {
25 //Toast.makeText(mcontext, "click...", Toast.LENGTH_SHORT).show();//第一种方法
26 mlistener.onClick(position);//第二种方法,
27 }
28 });//增加点击事件,这是第一种方法
29 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
30
31 @Override
32 public int getItemCount() {
33 return 21;
34 }//设置有多少个
35
36 class LinearViewHolder extends RecyclerView.ViewHolder {
37 private ImageView imageView;
38 public LinearViewHolder(@NonNull View itemView) {
39 super(itemView);
40 imageView=itemView.findViewById(R.id.iv);
41 }
42 }
43 public interface OnItemClickListener{
44 void onClick(int pos);
45 }//点击事件的第二种方法,建立接口
46 }

对应的layout_staggered_grid_recyclerview_item.xml文件:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="wrap_content"
3 android:layout_height="wrap_content"
4 android:orientation="vertical"
5 android:background="@color/white">
6
7 <ImageView
8 android:id="@+id/iv"
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 android:scaleType="centerCrop"/>
12 </LinearLayout>

最终效果图:

用RecyclerView实现瀑布流的更多相关文章

  1. Android RecyclerView(瀑布流)水平/垂直方向分割线

     Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...

  2. RecyclerView 制作瀑布流图片

    这是瀑布流的效果图 RecyclerView(ListView的升级版) 加载图片用的是第三方图片加载框架 ------------------------------------- 在Xml中 &l ...

  3. [Android Pro] RecyclerView实现瀑布流效果(二)

    referece to : http://blog.csdn.net/u010687392 在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutMa ...

  4. 使用RecyclerView实现瀑布流的效果

    主函数: public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; privat ...

  5. RecyclerView实现瀑布流效果(图文详解+源码奉送)

    最近有时间研究了一下RecyclerView,果然功能强大啊,能实现的效果还是比较多的,那么今天给大家介绍一个用RecyclerView实现的瀑布流效果. 先来一张效果图: 看看怎么实现吧: 整体工程 ...

  6. RecyclerView实现瀑布流效果(二)

    在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutManager.GridLayoutManager.StaggeredGridLayoutMan ...

  7. 初步使用RecyclerView实现瀑布流

    先看效果 关于RecyclerView,真的是很强大. 个人觉得主要方便的地方是 1.直接可以设置条目布局,通过setLayoutManager LinearLayoutManager:线性布局,横向 ...

  8. 基于RecyclerView的瀑布流实现

    fragment的布局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  9. RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)

    摘要 最近项目有个列表页需要实现线性列表和瀑布流展示的切换,首先我想到的就是上 [RecyclerView],他本身已经很好的提供了三种布局方式,只是简单做个切换应该是很简单的事情,如果要用Recyc ...

随机推荐

  1. CSS八种让人眼前一亮的HOVER效果

    一.发送效果 HTML <div id="send-btn"> <button> // 这里是一个svg的占位 Send </button> & ...

  2. 常见线程池之 newCacheThreadPool 缓存线程池 简单使用

    package com.aaa.threaddemo; import java.util.concurrent.BlockingQueue; import java.util.concurrent.E ...

  3. maven 中的工程依赖和层级依赖?

    一.什么是工程依赖? 思考问题?1.1一旦开始分模块开发的时候,之前的所有包都会被拆分成一个一个的项目 model mapper service ... 其实mapper需要model的支持,怎么解决 ...

  4. markdown介绍和使用(超全建议收藏)

    Markdown介绍 Markdown 其实在 2004 年就有了,不过之前一直很小众,这几年随着相关应用平台的发展,Markdown以其独到的优势迅速火起来了.Markdown编辑器使用一套格式标记 ...

  5. Java的代理机制

    Java的代理机制 使用代理 Proxzy 可以在运行时创建一组给定接口的新类,这种功能只有在编译时无法确定需要实现哪种接口时才需要使用. 1. 使用代理的时机 假如有一个表示接口的 Class 对象 ...

  6. Redis 中如何保证数据的不丢失,Redis 中的持久化是如何进行

    Redis 中数据的持久化 前言 AOF 持久化 什么是 AOF 持久化 为什么要后记录日志呢 AOF 的潜在风险 AOF 文件的写入和同步 AOF 文件重写机制 AOF 的数据还原 RDB 持久化 ...

  7. js演示面向对象

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 学习jsp篇:jsp简单实例之二登录

    编程环境:IDEA,Tomcat,JavaEE 一.实例二登录 1.在自己建的工程下的web目录下建一个文件夹为login,在login中编写登录代码(其实就是和实例一同一个项目) 2.先建登录页面j ...

  9. 今天带大家了解一下ICMP协议及基本使用

    ICMP协议的介绍及基本使用 1.IP数据包头的格式 2.ICMP协议的功能介绍 3.ICMP的基本使用方法 1.在讲解ICMP协议之前,我们先来简单了解一下IP数据包格式如图所示: 2.好现在切入正 ...

  10. python的namespace的理解

    Python命名空间的本质   python中的名称空间是名称(标识符)到对象的映射. 具体来说,python为模块.函数.类.对象保存一个字典(__dict__),里面就是重名称到对象的映射. -- ...