首页
学习
活动
专区
圈层
工具
发布

【RecyclerView】 七、RecyclerView.ItemDecoration 条目装饰 ( getItemOffsets 边距设置 )

的 getChildAdapterPosition 方法 , 可以给指定位置的 item 设置不同的边距 ; 这里为 RecyclerView 网格布局设置边距 , 普通的 item 组件上下左右边距都是...5 像素 , 整个网格布局的左侧 , 右侧 边距是 20 像素 , 网格布局每排 4 个元素 ; 为不同位置的 item 设置不同的边距 , 这里就需要对当前设置边距的位置进行查询与甄别...针对不同的位置设置不同的边距 // 每排最左侧和最右侧的左右边距设置成 20 像素, 其余 4 个边距一律设置成 5 if (currentPosition % 4 ==...中每行最左侧元素距离左边距 20 像素 , 每行最右侧元素距离右边距 20 像素 , 其余边距都是 5 像素 ; 四、完整代码示例 ---- 自定义 RecyclerView.ItemDecoration...相关资料 ---- 官方文档 : 使用 RecyclerView 创建动态列表 : https://developer.android.google.cn/guide/topics/ui/layout

6.2K00

手把手教你用RecyclerView实现猫眼电影选择效果

在最近的一个电影票平台项目中,使用RecyclerView实现了仿猫眼的电影选择控件,如下图所示: 以上图为例,我们的需求如下: 每一次滑动都让图片保持在中间。...第一张图片的左边距和最后一张的右边距需要大于其他图片的边距使其保持在中间 点击某张图片时让其滑动到中间 背景实现高斯模糊 在切换当前电影时有一个背景淡入淡出的效果 二、实现思路 我们一步步实现我们的需求...(2)第一张图片的左边距和最后一张的右边距需要大于其他图片的边距使其保持在中间 由于第0个item和最后一个item的图片边距比较特殊,而其他的都是默认边距,如果不做设置,第一张和最后一张图片就无法位于正中间...动态修改item的LayoutParams,我们不要在自定义的Adapter里直接更改,官方提供了ItemDecoration的api,可以给recyclerview的item添加装饰,我们在这里自定义一个继承...其他为默认边距 val rightMargin = if (positon == (itemCount!!

1.4K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【RecyclerView】 八、RecyclerView.ItemDecoration 条目装饰 ( onDraw 和 onDrawOver 绘制要点 )

    大小相同 , 这里要注意 , 每一次绘制时 , 都要先获取要绘制的 item 组件对应的坐标 ; 这里的用法与 getItemOffsets 完全不同 , 设置每个元素的边距偏移时 , 可以获取当前的序号..., 并针对不同的序号代表的 item 条目进行不同的边距设置 ; Canvas 中绘图的坐标系的 ( 0, 0 ) 位置是 RecyclerView 的左上角位置 ; 使用 Canvas 绘图时 ,...针对不同的位置设置不同的边距 // 每排最左侧和最右侧的左右边距设置成 20 像素, 其余 4 个边距一律设置成 5 if (currentPosition % 4 ==...: 正常的 item 边距设置都是 20 像素 , 每行最左侧距离左边 40 像素 , 每行最右侧边距距离右侧 40 像素 ; ① item 底部背景 : 使用 onDraw 方法绘制 , 给每行的第一个元素绘制一个底部背景...相关资料 ---- 官方文档 : 使用 RecyclerView 创建动态列表 : https://developer.android.google.cn/guide/topics/ui/layout

    1.6K00

    写给初学者的Jetpack Compose教程,Lazy Layout

    接下来我们就学习一下如何通过合理设置边距,来让Lazy Layout变得更加美观。...这也难怪,毕竟左侧的边距我们设置的是10dp,而右侧的边距虽然也是10dp,但是它会再叠加第二个子项左侧的边距,于是就变成了20dp。 最后一个子项也会面临同样的问题。 那么如何解决这个问题呢?...有一个非常简单的办法,就是我们给Lazy Layout整体的左右两边都再设置一个10dp的边距不就行了吗,代码如下: @Composable fun ScrollableList() { val...然而这个解决方案并不完美,因为如果你尝试滚动一下列表的话,你会发现由于给Lazy Layout设置了边距,左右两侧内容会出现切割现象: 为了解决这个问题,我们可以使用专门为Lazy Layout打造的边距设置属性...最后,我们也可以不用借助Modifier.padding()来设置边距,Lazy Layout提供了专门给子项之间设置边距的属性,使用Arrangement.spacedBy()即可,代码示例如下: @

    1.2K10

    RecyclerView定制:通用ItemDecoration及全展开RecyclerView的实现不同场景RecyclerView实现

    Android L面世之后,Google就推荐在开发项目中使用RecyclerView来取代ListView,因为RecyclerView的灵活性跟性能都要比ListView更强,但是,带来的问题也不少...本文主要就以以下场景给出RecyclerView使用参考: RecyclerView的几种常用场景 如何实现带分割线的列表式RecyclerView 如何实现带分割线网格式RecyclerView 如何实现全展开的列表式...全展开的线性列表 不同场景RecyclerView实现 默认的纵向列表式RecyclerView 首先看一下最简单的纵向线性RecyclerView,一般用以下代码: LinearLayoutManager...--GridLayoutItemDecoration 网格式RecyclerView的处理流程跟上面的线性列表类似,不过网格式的需要根据每个Item的位置为其设置好边距,比如最左面的不需要左边占位,最右面的不需要右面的占位...super.measureChildWithMargins(view, 0, 0); //获取childView,以便获得宽高(包括ItemDecoration的限制),以及边距

    2.9K41

    Android ViewPager2 真的香么?

    AndroidManifest->application 添加错误中要求的,但是并不能解决问题,之后查阅了很多资料,发现 Androidx 与 Android support 库 不共存,这可真是麻烦了,如果在实际的项目中直接用可麻烦大了...尝试 和尚尝试绑定不同背景色和文字内容;与 ViewPager 不同的是,适配器需要使用 RecyclerView.Adapte,这也意味着绑定数据的方式更灵活,和尚为了测试 ViewPager2...新特性,设置了点击事件; 借助 setOrientation() 方法可以动态改变切换方向,水平或竖直; 借助 notifyDataSetChanged() 方法可以实时更新数据; 借助 setLayoutDirection...() 方法可以动态调整内容展示方位,从左到右或从右到左; 此时感觉 ViewPager2 真的很方便,尤其是实时更新数据和动态调整切换方向,真香!...supportsRtl 属性,实际很久以前就有了,根据设置内容居左或居右; 需要 AndroidManifest->application 中添加 android:supportsRtl="true" 属性; 内边距和外边距建议设置

    2.3K31

    常用Android布局文件优化技巧总结

    每个视图元素都可以设置一些属性,如宽度、高度、边距、背景颜色等。这些属性可以用来控制视图元素在布局中的位置和大小。...在解析布局文件时,Android 系统会使用反射机制来动态地创建视图对象。这意味着,每当系统遇到一个新的视图元素时,它会使用 Java 反射来创建该元素的实例。...ViewStub 是一个轻量级的视图容器,可以在需要时动态地加载布局。...通过使用 ViewStub,可以避免在布局文件被加载时就把所有的 view 组件都实例化出来,而可以根据需要动态地实例化这些组件,从而减少内存占用率和加快页面渲染速度。...使用 RecyclerView 的示例代码如下: recyclerview.widget.RecyclerView android:id="@+id/recyclerView

    62520

    CardView的那点事儿

    CardView 在 Android 5.0(API 级别 21)及更高版本中使用真实高度与动态阴影,而在早期的 Android 版本中则返回编程阴影实现。...card_view:cardBackgroundColor 卡片的背景色 card_view:cardCornerRadius 卡片的圆角大小 card_view:contentPadding 卡片内容于边距的间隔...V21+的版本和之前的版本仍旧具有一样的计算方式 card_view:cardPreventConrerOverlap 在V20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠 一般来说和RecyclerView...搭配起来使用效果更加~ ---- 如何使用 添加依赖项 RecyclerView 与 CardView 小组件为 v7 支持内容库的一部分 将这些 Gradle 依赖项添加至您的应用模块 dependencies...compile 'com.android.support:cardview-v7:21.0.+' compile 'com.android.support:recyclerview-v7:21.0

    1.3K20

    听说你想玩RecyclerView嵌套GridView

    RecyclerView嵌套GridView 问题及原因 有很多小伙伴们可能会遇到这样的问题: 为什么不论我传入多大size的List,我的GridView只能显示一行?...因为RecyclerView和GridView都属于可滑动控件,两者嵌套会导致滑动冲突,Android不允许这样的情况出现,所以索性将GridView宽度定死,定为一行Item的高度且不可滑动,所以导致了我们只显示一行这个问题的出现...UNSPECIFIED模式 如果高度模式为UNSPECIFIED,则它会计算包含一个Item的GridView的内容高度,其计算式为: 内容高度 = 上内边距 + 下内边距 + 一个子项高度 + 边宽...* 2 个人猜测,当RecyclerView嵌套GridView的时候,其GridView的MeasureSpec的模式为UNSPECIFIED**。...EXACTLY模式 因EXACTLY模式下,GridView的高度已经设定好了,所以不用获取子项的高度及边距等,源码中通过int heightSize = MeasureSpec.getSize(heightMeasureSpec

    2.6K20
    领券