7.1 RecyclerView 实现瀑布流

RecyclerView彩虹瀑布流实现 目录:     1.瀑布流的应用场景     2.瀑布流布局实现的简单分析     3.实现彩虹瀑布流   1.瀑布流的应用场景        瀑布流的应用在移动开发中还是比较常见的,譬如在一些图片类和电商类APP中用来展示摄影图片或者商品信息,由于有时候图片的规格是不一致的,所以就有了交错的瀑布流布局的需求。   2..瀑布流布局实现的简单分析            其实瀑布流... 阅读详情
时间: 2015-07-27 18:48:27 http://www.bubuko.com/infodetail-999014.html     阅读: 9193      评论: 3      收藏: 0       [点我收藏+]

标签:瀑布流   android   动画   布局   

RecyclerView本身提供了三个LayoutManager的实现

  • LinearLayoutManager
  • GridLayoutManager
  • StaggeredGridLayoutManager

第一个和第二个大家比较常用,今天我们就来使用第三个比较陌生的StaggeredGridLayoutManager,让你分分钟实现瀑布流布局。 
首先来看下最后的效果

技术分享

好吧,让我们来实现它吧 
首先是Item的布局masonry_item.xml很简单,就是一张图片加文字,item背景设置为白色

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/white">

    <ImageView
        android:id="@+id/masonry_item_img"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"/>
    <TextView
        android:id="@+id/masonry_item_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"/>
</LinearLayout>

为了简单起见,我们假设每个item的数据是一个产品信息

public class Product {
    private int img;
    private String title;

    public Product(int img, String title) {
        this.img = img;
        this.title = title;
    }

    public int getImg() {
        return img;
    }

    public void setImg(int img) {
        this.img = img;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

recyclerView的adapter也很简单,构造方法接受产品列表数据源

public class MasonryAdapter extends RecyclerView.Adapter<MasonryAdapter.MasonryView>{
    private List<Product> products;


    public MasonryAdapter(List<Product> list) {
        products=list;
    }

    @Override
    public MasonryView onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.masonry_item, viewGroup, false);
        return new MasonryView(view);
    }

    @Override
    public void onBindViewHolder(MasonryView masonryView, int position) {
        masonryView.imageView.setImageResource(products.get(position).getImg());
        masonryView.textView.setText(products.get(position).getTitle());

    }

    @Override
    public int getItemCount() {
        return products.size();
    }

    public static class MasonryView extends  RecyclerView.ViewHolder{

        ImageView imageView;
        TextView textView;

       public MasonryView(View itemView){
           super(itemView);
           imageView= (ImageView) itemView.findViewById(R.id.masonry_item_img );
           textView= (TextView) itemView.findViewById(R.id.masonry_item_title);
       }

    }

}

主界面Activity代码就可以把数据源和view连起来了

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView= (RecyclerView) findViewById(R.id.recycler);
        //设置layoutManager
        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
        //设置adapter
        initData();
        MasonryAdapter adapter=new MasonryAdapter(productList);
        recyclerView.setAdapter(adapter);
        //设置item之间的间隔
        SpacesItemDecoration decoration=new SpacesItemDecoration(16);
        recyclerView.addItemDecoration(decoration);

    }

第一 
大家看到我们把recyclerview的layoutManager设置成了

new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)

参数含义显而易见,2就是2列,第二个参数是垂直方向

第二

SpacesItemDecoration decoration=new SpacesItemDecoration(16);
recyclerView.addItemDecoration(decoration);

设置间隔,我们自定义了一个SpacesItemDecoration,代码非常简单

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;
        }
    }
}

重点就这2个地方 ,几行代码就实现了一个漂亮的瀑布流布局,有兴趣自己去玩下哦。

RecyclerView实现瀑布流布局

标签:瀑布流   android   动画   布局   

原文:http://blog.youkuaiyun.com/tiankong1206/article/details/47088995

踩
( 5)
赞
( 6)
    
举报
Android中利用RecyclerView实现瀑布流效果 RecyclerView相比于传统的ListView,功能更加强大,使用也比较方便,因此Android官方更加推荐使用RecycleView,未来也会有更多的程序逐渐从ListView转向RecycleView。为此,首先先来了解下RecycleView的用法。 RecycleView属于新增的控件,为了让RecyclerView在所有的Android版本上都能使用,系统将RecyclerVie 阅读详情

相关推荐

Android手把手教你实现卡片式瀑布流效果(RecyclerView+CardView,附源码)

Android手把手教你实现卡片式瀑布流效果 卡片式的瀑布流效果是一种非常美观的UI设计,自从Android 5.0的 RecyclerView出现以后,实现瀑布流变得十分简单,本文将一步步带领读者去实现一个卡片式的瀑布流布局。 一、先上效果图 二、代码实现卡片式瀑布流 1. 涉及到要使用的类和控件 类或控件 介绍 作用

山中小僧的进阶之路 6075

RecyclerView瀑布流+点击事件(简易版)

1.首先,导依赖 implementation'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30' 2.在包里配置 allprojects { repositories { google() jcenter() **maven { url &quot;https://jitpack.io&quot;...

qq_43040588的博客 748

RecyclerView实现简单的瀑布流

RecyclerView实现简单的瀑布流 注意: 我这里只是实现一个简单的瀑布流效果,你可以在我的程序上加一些复杂的操作。 先看一下效果图: 如图所示,我这里只用了两张图片,并且苹果图片的宽250高250,草莓图片宽250高222,因为我在程序中没什么限制,所以如果你要用我的程序,实现上图所示的效果,请自己改一下图片的宽和高。 因为比较简单,我直接上代码了,注释都写上了,请看代码: Stagge...

冰之沁泠的博客 844

精通Android布局管理——从RecyclerView到瀑布流布局完全解析

在Android开发中,高效地展示数据集合是构建动态和响应式应用的核心。RecyclerView作为ListView和GridView的强大替代者,提供了更灵活的布局配置和性能优化。本篇博客将深入探讨RecyclerView的使用方法,包括其瀑布流布局实现,并提供实例源码,帮助你在项目中实现精美的界面布局。### RecyclerView简介 `RecyclerView`是Android标准开发包中的一个强大组件,用于在有限的窗口展示大量数据项。它通过复用视图单元格来优化内存使用,极大提升了滑动的流畅性。#

youmashengyue的博客 1398

android RecyclerView 实现瀑布流带图库浏览效果

android RecyclerView 实现瀑布流带图库浏览效果这是本人第一次写博客,不好的地方,望各位大神多多指教! 好了进入正题,平常大家想实现瀑布流的时候,第一想到的就是重写控件,来达到瀑布流效果,自从了解到了 RecyclerView 后,才发现实现这个效果就需要一行代码就可以搞定,是不是很惊讶,好了,先上代码来验证一下!`package com.example.administrato

simon_yuyu的博客 3049

RecyclerView配合StaggeredGridLayoutManager实现瀑布流效果

1.前言 利用RecyclerView配合StaggeredGridLayoutManager可以实现类似于淘宝和京东的商品瀑布流效果,下面是一个简单的使用例子。 2.例子 就不多讲了,直接上示例代码。 在页面的布局文件使用RecyclerView。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr...

‎‎‎‎‎不想吃泡面 1640

BRVAH(BaseRecyclerViewAdapterHelper)详解

一.什么是BaseRecyclerViewAdapterHelper GitHub地址:https://github.com/CymChad/BaseRecyclerViewAdapterHelper 官方网站:http://www.recyclerview.org/ BRVAH是一个强大的RecyclerAdapter框架,它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。 ...

xxdw1992的博客 5415

RecyclerView+CardView+Glide加载图片实现瀑布流

配合博客:Android框架之路——Glide加载图片(结合RecyclerView、CardView)

RecyclerView使用,Grid、瀑布流简单实现

学习Android过程中记的笔记,希望能和大家共同进步!!!

weixin_55512999的博客 1774

RecyclerView详解及实现瀑布流式布局

详细介绍RecyclerView的一个Demo,里面更有瀑布流式布局、长按拖拉拽、侧滑删除等功能代码

BaseRecyclerViewAdapterHelper的测试使用

BaseRecyclerViewAdapterHelper的测试使用,数据未封装起来。比Github上的更加易懂~

新闻模块——RecyclerView

4.setAdaoter初始化适配器,设置适配器。recyclerview的基本使用。如何实现recyclerview。recyclerview的特点。**** 环境复杂度。

Chinese_H的博客 733

BaseRecyclerViewAdapterHelper-master.zip

recycleView案例,

SwipeRefreshLayout+CardView+RecyclerView 精美瀑布流效果

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。 本文首发于此 博主:威威喵|博客主页:https://blog.csdn.net/smile_running 感受 Material Design UI 魅力,你不能错过的Material Design 全系列文章: Material Design 之一 Bott...

你若盛开,蜜蜂自来 1万+

A股历史数据免费下载终极指南:4000+个股数据一键打包获取

本文提供了获取A股历史数据的完整免费方案,重点介绍了Tushare Pro、AkShare等开源金融数据API的使用方法。通过详细的Python脚本示例,指导读者如何自动化批量抓取、清洗、存储4000多只个股的历史行情数据,并分享数据质量校验与性能优化技巧,助力量化研究与市场分析。

ooo22的博客 2240

2024年上半年网络工程师下午真题及答案解析

位于MPLS域边缘、连接其他网络的LSR称为( 3 ),区域内部的LSR称为核心LSR(CoreLSR)IP报文进入MPLS网络时,MPLS入口设备分析IP报文的内容并为其添加合适的标签,所有MPLS网络中的LSR根据标签转发数据,当该IP报文离开MPLS网络时,标签由出口LER弹出。LSP的出口LER称为( 6 )。某高校网络拓扑如下图所示,两校区核心(CORE-1、CORE-2),出口防火墙(NGFW-1、NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收敛,两校区相距40km。

bsefef的博客 2475

Android控件RecyclerView实现横向滑动、瀑布流。

Android控件RecyclerView实现横向滑动、瀑布流。

风雨踏梦行 1万+

[漏洞剖析]JeecgBoot queryFieldBySql注入与JDBC连接滥用:从内存马植入到RCE的完整攻击链

本文深度剖析了JeecgBoot框架中queryFieldBySql接口的SQL注入漏洞及其引发的完整攻击链。攻击者利用该漏洞,通过Freemarker SSTI植入隐蔽的内存马,并进一步滥用JDBC连接测试功能,借助H2数据库特性实现远程命令执行(RCE),揭示了低代码平台中功能滥用与安全配置疏忽带来的严重风险。

weixin_29232121的博客 115

Android使用RecyclerView实现瀑布流

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

m0_57473261的博客 1104

Win11用户文件夹中文名修改全攻略

本文详细介绍了Windows 11系统中修改中文用户文件夹名称的完整步骤。操作包含七个关键环节:前期数据备份、账户名称修改、管理员账户激活、用户文件夹重命名、注册表路径更新、收尾操作及注意事项。特别强调需要同步修改账户名、文件夹名和注册表关联路径,并建议操作前备份重要数据。文中还针对常见问题提供了解决方案,如软件报错时的符号链接创建方法。整个过程需谨慎操作,建议在管理员权限下逐步执行,修改完成后需验证系统及软件功能是否正常。

Qinti_mm的博客 3123

GEE聚类分析:基于sentinel-2 影像进行 K-Means 聚类分析

这篇博客介绍了如何使用 Google Earth Engine (GEE) 进行 K-Means 聚类分析,以识别感兴趣区域(ROI)内的不同地表覆盖类型。文章详细说明了从定义用户参数、准备参考区域、加载和预处理 Sentinel-2 图像,到训练 K-Means 聚类器并对图像进行聚类的完整流程。代码示例展示了如何设置参数、采样像素数据、训练聚类器,并将结果可视化。最后,还提供了将聚类结果导出到 Google Drive 的选项。通过该教程,用户可以掌握在 GEE 平台上进行地理数据聚类分析的基本方法。

此星光明博客 263

RecyclerView StaggeredGridLayoutManager瀑布流实现中遇到的问题

1、下面的代码主要是用于布局错乱后,自动修复,以及防止item左右交换的问题。在我遇到的问题当中,如果只setGapStrategy,会导致列表往回滑动时,顶部出现空白的问题。所以需要开启系统自动计算。 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(SPAN_COUNT, StaggeredGridLayoutManager.VERTICAL); // 开启系统自动计算,列表机制默认

艾觅的博客 3443

Esp32蓝牙Hid调用方案 http执行设备、鼠标、键盘相关操作

本文主要介绍 Esp32 蓝牙 Hid 相关的多种操作方式,详细的设备、鼠标、键盘相关操作的 http 调用方法。下面是整理出的所有 http 调用方法和 rhino 引擎方式。本机调用的话直接使用http://localhost:8080 如果是局域网调用则使用软件里的地址 比如我的是http://192.168.1.5:8080。文件地址: https://www.123865.com/s/Qtm4jv-xyZbd?使用前需要一块烧录好的ESP32板子并在手机安装好embedded软件用于蓝牙通信。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 569

Android使用RecyclerView和StaggeredGridLayoutManager实现瀑布流效果-引子

1、瀑布流概述     淘宝、京东商城等电商平台的首页在下滑刷新的过程中会出现左右不对齐的情况,这种情况的产生主要是由商品类型决定的。不同类型的商品决定了不同的展示方式,一般情况下会通过自营、满减、满折等标签+价格+描述呈现。鉴于商品的多样性和展示的复杂性,会造成不同的商品单位高低不一的问题,这就是我们要讲的瀑布流的概念。 2、瀑布流实现步骤 搭建Android开发平台创建项目并引入相关依赖包 ...

Edwin_C 的博客 2733

24、中性原子量子计算:原理、方法与实验

本文系统介绍了中性原子量子计算的原理、方法与实验进展。重点阐述了利用碱金属原子作为量子比特,通过磁光阱、光偶极阱和光晶格等技术实现原子捕获与控制的方法。同时,详细分析了单量子比特门操作和量子态工程的实现手段,并总结了相关实验结果与未来发展方向。该技术路线为构建大规模量子计算系统提供了可行方案。

ol789012的博客 246

YOLOv8中的可变形卷积改进 | 从DCNv1到DCNv3的多位置替换可变形卷积保姆级实操

可变形卷积(Deformable Convolution)最早由Dai等人在2017年提出,其核心思想是在标准卷积操作的基础上,引入可学习的偏移量(offsets),使卷积核能够自适应调整其采样位置,从而增强模型对目标变形的感知能力。return x本文通过深入探讨可变形卷积在YOLOv8中的应用,详细介绍了DCNv1、DCNv2和DCNv3的原理和实现,并通过实验验证了其在目标检测任务中的有效性。未来,我们将继续探索更多优化策略和技术,提升YOLOv8模型的性能,以应对更复杂的目标检测任务。

一键难忘的博客 4051
上一篇: 5.3.2 开源Android-PullToRefresh下拉刷新源码分析
下一篇: Android studio 中的中文乱码的问题的解决
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值