首先建立一个 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. java 多线程 start方法 run方法 简单介绍。

    一 start开启一个多线程, run 只是一个内部的方法. package com.aaa.threaddemo; /* * start方法的作用? * 在 Java中启动多线程调用的是start方 ...

  2. Redis学习笔记(三)redis 的键管理

    Redis 的键管理 一.Redis 数据库管理 Redis 是一个键值对(key-value pair)的数据库服务器,其数据保存在 src/server.h/redisDb 中(网上很多帖子说在 ...

  3. C#运算符重载---逐步地分析与理解

    1.什么是运算符重载 定义:(百科定义)就是把已经定义的.有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能.操作符重载可以将概括性的抽象操作符具体化,便于外部调用而无需知晓内部具体运算过 ...

  4. WinForms 获取文件夹的基本信息

    1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Da ...

  5. JS中的堆内存与栈内存

    在js引擎中对变量的存储主要有两种位置,堆内存和栈内存. 和java中对内存的处理类似,栈内存主要用于存储各种基本类型的变量,包括Boolean.Number.String.Undefined.Nul ...

  6. Linux命令date日期时间和Unix时间戳互转

    A.将日期转换为Unix时间戳将当前时间以Unix时间戳表示: date +%s 输出如下: 1361542433 转换指定日期为Unix时间戳: date -d '2013-2-22 22:14' ...

  7. 推荐一款仿iPhone桌面的代码. ___王朋.

    Demo:https://files.cnblogs.com/files/sixindev/LxGridView-master.zip 这是作者原来的效果图,很多东西还需要慢慢学习.作者用的很多类,根 ...

  8. 无脑安装java编程语言开发的集成环境 IDEA 白嫖版本

    无脑安装java编程语言开发的集成环境  IDEA 根python很类似:可以借鉴无脑安装--Python 及 安装python集成开发环境pycharm - 隐姓埋名4869 - 博客园 (cnbl ...

  9. 【发点感慨】我的cnblogs的文章被爬到了别的网站,阅读量比在cnblogs上还要高

    近期我写了挺多VictoriaMetrics的文章,在搜索相关文章的时候发现,我的文章被别的网站爬去了: 写写技术文章就是无偿分享给别人看的,越多人看到越多人受益,这一点没毛病. 但是: 爬了别人的文 ...

  10. 编译安装haproxy

    一.安装lua环境 1.1 安装依赖包 [root@centos7 ~]# yum install gcc readline-devel 1.2 下线lua源码包并解压 [root@centos7 ~ ...