首先建立一个 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. 集合框架-Map集合-HashMap存储自定义对象

    1 package cn.itcast.p6.hashmap.demo; 2 3 import java.util.HashMap; 4 import java.util.Iterator; 5 im ...

  2. linux虚拟机xshell安装

    目录 一:虚拟机安装 二:配置windows网络 三:linux操作系统安装 四:xshell安装使用 一:虚拟机安装 1.双击虚拟机软件 ---> 下一步 直至安装完毕 2.安装Linux操作 ...

  3. Kubernetes的Resource和Dashboard(十三)

    一.Resource和Dashboard 1.1.Resource 因为K8S的最小操作单元是Pod,所以这里主要讨论的是Pod的资源 官网:https://kubernetes.io/docs/co ...

  4. Flutter 2.10 更新详解

    Flutter 2.10 版已正式发布!虽然⾃ 上次稳定版本发布 以来还不到两个⽉,即使在这么短的时间内,我们也已处理和关闭了 1843 个 Issue,合并了来⾃全球 155 位贡献者的 1525 ...

  5. 计算机网络-5-10-TCP运输连接管理

    TCP的运输连接管理 TCP是面向连接的通信,运输连接是用来传送TCP报文的,TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程.因此,运输连接有三个阶段,即:建立连接,数据传送,连接释 ...

  6. 前后端数据json交换的问题

    问题1:前端发送给后端数据了,后端也接收到了,后端同时返回数据给前端了,但是前端的ajax请求中的success(data){}中的方法不执行 解决:排查了很多问题,结果都一一排除了,最后发现后端发送 ...

  7. ExcelPackage 使用說明

    1.使用方法 public IActionResult Excel() { string sWebRootFolder = _hostingEnvironment.WebRootPath; strin ...

  8. 调试程序Bug-陈棚

    1.使用NSAssert 主要可以作为自定义bug的返回信息,对调试极为方便知道bug出现在哪 NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式 ...

  9. python——rsa加签名以及分段加密

    借鉴 https://www.cnblogs.com/sammy1989/p/9583965.html 最近请求一个系统,对方要求加密.折腾了一天,使用pycryptodome库,最终代码如下: #! ...

  10. Servlet版本冲突导致页面404

    入门servlet前先准备好了Tomcat环境以及用Idea打了一个Servlet war包想看看效果,结果发现页面跳转一直报404错误,检查了跳转url,项目结构等情况后,问题依旧没有解决.最后偶然 ...