recyclerview

RecyclerView实现悬浮吸顶、分隔线、到底提示效果

若如初见. 提交于 2020-01-11 05:45:13
本文中所有效果通过ItemDecoration实现,通过此实现的可以与业务解耦,让RecyclerView的模板更加简洁,不关心任何辅助性ui, github地址 一、顶部吸附效果图 二、顶部不吸附效果图 三、不满一屏效果 四、核心实现点 1、为什么通过ItemDecoration能够实现,原理? ①通过getItemOffsets()方法获取当前模板view的left、top、right、bottom边距,这些留出的间距用于绘制这些辅助性ui。 // RecyclerView的measure child方法 public void measureChild(@NonNull View child, int widthUsed, int heightUsed) { final LayoutParams lp = (LayoutParams) child.getLayoutParams(); //将getItemOffsets()获取的值累加到测量值之中 final Rect insets = mRecyclerView.getItemDecorInsetsForChild(child); widthUsed += insets.left + insets.right; heightUsed += insets.top + insets.bottom; final int

recyclerview加载多种布局

喜夏-厌秋 提交于 2020-01-10 01:06:03
首先recyclerview适配器继承自RecyclerView.Adapter 不是之前的那个 public class MyDetailsAdapter extends RecyclerView.Adapter { //设置常量 //平台 private static final int LEFT = 1; //用户 private static final int RIGHT = 0; //头部 private static final int TITLE = 3; @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { RecyclerView.ViewHolder holder = getViewHolderByViewType(viewType); return holder; } /** * 根据不同的position,设置不同的ViewType * position表示当前是第几个Item,通过position拿到当前的Item对象,然后判断这个item对象需要那种视图 */ @Override public int getItemViewType(int position) { if

FormLayoutManager -- 解说(1)

吃可爱长大的小学妹 提交于 2020-01-08 16:09:50
FormLayoutManager首页,里面有github地址 目录 前言 构造方法 onLayoutChildren handleLayoutChildren 总结 前言 接下来会一步步带大家走进FormLayoutManager。在写这篇博客之前,我已经实现可以不同行或不同列多类型布局。所以下面讲解是以最新的v2.0代码来说明,后面也会介绍到怎么实现多类型。FormLayoutManager的完整代码有点长,我就不贴出来,大家可以自己看着源码,一边看文章,我们由上至下来说。 构造方法 public FormLayoutManager(int columnCount){ mColumnCount = columnCount; } public FormLayoutManager(boolean isHorV, int count){ this(isHorV, count, null); } /** * 什么场景需要传入RecyclerView * 在滚动过程会刷新的数据的时候,最好设置RecyclerView */ public FormLayoutManager(int columnCount, RecyclerView recyclerView){ this(true, columnCount, recyclerView); } public

Android中ListView与RecyclerView的基本使用(附Project压缩包)

旧巷老猫 提交于 2020-01-07 12:28:47
Android中ListView与RecyclerView的详解与使用【附Project压缩包】 ListView简介 ListView的最简单的使用 ListView的优化 RecyclerView RecyclerView的简单使用(其实一点也不简单) ListView简介 ListView可以用来展示数据的控件,最熟悉的像qq里的好友列表,就可以通过Listview来实现。ListView可以理解为一个由很多行view组成的列表,而view通过绑定item改变自身的样式。 ListView的最简单的使用 一:在activiy_main.XML中写入一个ListView < ListView android : layout_width = "match_parent" android : layout_height = "match_parent" android : id = "@+id/l_1" / > 二:在MainActivity中声明数据,这里以一组String数据为例 private String [ ] data = { "1" , "2" , "3" , "4" , "5" } ; 三:构造适配器,这里的适配器泛型指向String类型,item是系统内置的item ArrayAdapter < String > adapter = new

Android短视频滑动播放(二)

主宰稳场 提交于 2020-01-07 10:21:21
Android短视频滑动播放(一) 上一篇文章中讲到了短视频滑动的基本实现,文末也给出了相应的例子,可以运行查看,本节进一步完善滑动处理内容,主要给出了数据更新内容,下拉刷新最新内容,上拉预加载,可不断向下滑动;同时,介绍了视频的暂停、继续处理,循环播放或自动滑动到下一条以及多布局的处理。 1. 数据刷新 内容刷新布局采用了SwipeRefreshLayout,实现经典式的下拉刷新控制。 <androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:id="@+id/srf_video_list" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_little_video" android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> 模拟数据请求

RecyclerView瀑布流的实现方式

吃可爱长大的小学妹 提交于 2020-01-07 08:35:16
public class StaggAdpter extends RecyclerView.Adapter<StaggAdpter.ViewHolder>{ private Context context; private List<String> list; private List<Integer> hiehts = new ArrayList<>(); public StaggAdpter(Context context, List<String> list) { this.context = context; this.list = list; for(int i = 0;i<list.size();i++){ hiehts.add((int) (Math.random()*400+300)); } } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { ViewHolder holder = new ViewHolder(LinearLayout.inflate(context, R.layout.list1, null)); return holder; } @Override public void onBindViewHolder

RecyclerView长按删除

喜欢而已 提交于 2020-01-04 03:02:53
Adapter中添加 public interface LongClickLisenter { void LongClickLisenter(int position); } private LongClickLisenter longClickLisenter; public void setLongClickLisenter(LongClickLisenter longClickLisenter) { this.longClickLisenter = longClickLisenter; } public void del(int i) { result.remove(i); notifyDataSetChanged(); } 适配器onCreateViewHolder中添加 view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int layoutPosition = myViewHandler.getLayoutPosition(); if (longClickLisenter != null) { longClickLisenter.LongClickLisenter(layoutPosition); }

Android 架构组件之 Paging

非 Y 不嫁゛ 提交于 2019-12-31 23:16:23
文章目录 1. 为什么要使用 Paging Library? 2. 分析 Paging 的组成及原理 2.1 PagedList 2.2 数据源 DataSource 2.3 总结一下不同的数据源,如何创建 DataSource 2.4 PagedListAdapter 3. 通过一个简单的案例,介绍如何使用 Paging Library 4. 最后对 Paging Library 进行简单的总结 参考链接 Paging Library 是 Google 提出的分页加载库,本文将从以下几个方面对 Paging 进行介绍: 为什么要使用 Paging Library? 分析 Paging 的组成及原理 通过一个简单的案例,介绍如何使用 Paging Library 最后对 Paging Library 进行简单的总结 1. 为什么要使用 Paging Library? 我们经常需要处理大量数据,但大多数情况下,只需要加载和显示其中的一小部分。如果去请求用户不需要的数据,势必会浪费用户设备的电量和带宽。如果数据比较多情况下,消耗用户的流量也会比较多。 Paging Library 是 Google 提出的分页加载库,它可以妥善的逐步加载数据, 解决上面提到的痛点。此外: Paging Library 可以与 RecyclerView 无缝结合; Paging Library

Android 双向滑动表格控件实现--FormLayoutManager

℡╲_俬逩灬. 提交于 2019-12-28 19:02:14
前言 为什么会有这篇文章诞生呢?本人工作以为一直没做个表格控件的需求,直到最近的新公司,要做一个表格的需求。一开始遇到需求,自己脑海就先构思了一下思路。当然也会想大家一样百度谷歌看看大家普遍是怎么做的。一百度,我就惊讶了。 怎么大家都是recyclerview或listview外面一层套一个HorizontalScrollView来实现表格。我就想为啥不一个recyclerview用一个FormLayoutManager来实现。也许大家现在再找这个FormLayoutManager,发现谷歌好像没自带这个LayoutManager喔,没错这是我自定义的一个LayoutManager。其实会自定义LayoutManager的程序员也不少,为什么大家就没想到用来实现表格的? 不是因为我冰雪聪明,是因为大家懒。大家天天看博客,看github,用别人的库,就想着怎么用就行了。学会了自定义某个大类,但平时又不用于生活中,这样浑浑噩噩,你良心疼不疼。我也喜欢用第三方的开源库,一来免费,二来好用。那我良心就不疼,等我写完这系列文章就不疼了,因为我也开始写一些第三方库,虽然是一些小库,但起码自我感觉好像踏进大神们的领域,就好像港剧里面一个打工仔终于有幸踏入太平山俱乐部一样。 正经事说完了,接下来就开始介绍不正经的那些事。 区别

Android tabLayout+recyclerView实现锚点定位

我是研究僧i 提交于 2019-12-28 18:16:02
原文链接: https://mp.weixin.qq.com/s/L3o2i3WTmg1ScXEYDS8YCg 在上一篇文章 Android 实现锚点定位 中,我们介绍了 tablayout + scrollView 实现的锚点定位,今天我们使用 tablayout + recyclerView 来实现同样的效果。 效果图: 实现思路 实现的思路与上一篇文章是一致的: 1、监听 recyclerView 滑动到的位置, tablayout 切换到对应标签 2、 tablayout 各标签点击, recyclerView 可滑动到对应区域 数据模拟 数据模拟,使用上一文章的 AnchorView 作为 recyclerView 的每个字view,同时这里对 recyclerView 的最后一个子view的高度进行修改,让其充满屏幕。 private LinearLayoutManager manager; private String[] tabTxt = {"客厅", "卧室", "餐厅", "书房", "阳台", "儿童房"}; //判读是否是recyclerView主动引起的滑动,true- 是,false- 否,由tablayout引起的 private boolean isRecyclerScroll; //记录上一次位置,防止在同一内容块里滑动