首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自定义ItemDecoration类未在最后一项上绘制分隔符

是指在Android开发中,自定义RecyclerView的ItemDecoration类(用于绘制列表项之间的分隔符)时,最后一项列表项上没有正确绘制分隔符的情况。

解决这个问题的方法是在自定义的ItemDecoration类中,判断当前绘制的列表项是否为最后一项,如果是最后一项,则不绘制分隔符。

以下是一个示例的解决方案:

代码语言:txt
复制
public class CustomItemDecoration extends RecyclerView.ItemDecoration {
    private Drawable divider;

    public CustomItemDecoration(Context context) {
        // 初始化分隔符Drawable
        divider = ContextCompat.getDrawable(context, R.drawable.divider);
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int itemCount = parent.getAdapter().getItemCount();
        int lastItemPosition = itemCount - 1;

        for (int i = 0; i < itemCount; i++) {
            // 判断是否为最后一项
            if (i != lastItemPosition) {
                // 绘制分隔符
                drawDivider(c, parent, i);
            }
        }
    }

    private void drawDivider(Canvas canvas, RecyclerView parent, int position) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();
        View child = parent.getChildAt(position);
        RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
        int top = child.getBottom() + params.bottomMargin;
        int bottom = top + divider.getIntrinsicHeight();
        divider.setBounds(left, top, right, bottom);
        divider.draw(canvas);
    }
}

在上述示例中,我们通过自定义的ItemDecoration类来绘制分隔符。在onDraw方法中,我们遍历所有的列表项,判断是否为最后一项,如果不是最后一项,则调用drawDivider方法绘制分隔符。

这样,就可以确保自定义的ItemDecoration类在最后一项上不绘制分隔符,解决了自定义ItemDecoration类未在最后一项上绘制分隔符的问题。

推荐的腾讯云相关产品:腾讯云移动开发平台(https://cloud.tencent.com/product/mwp)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

教你玩转 Android RecyclerView:深入解析 RecyclerView.ItemDecoration(含实例讲解)

,包括ItemDecoration简介、使用方法 & 实例讲解,最终结合 自定义View实现 时间轴UI开发,希望你们会喜欢。...ItemDecoration 简介 1.1 定义 `RecyclerView`的静态内部类 1.2 作用 向 `RecyclerView`中的 `ItemView...具体实现 步骤1:自定义ItemDecoration ItemDecoration.java public class DividerItemDecoration extends RecyclerView.ItemDecoration...具体代码实现 * 步骤1:自定义 ItemDecoration* public class DividerItemDecoration extends RecyclerView.ItemDecoration...- 下一篇文章我将继续结合 自定义View & RecyclerView.ItemDecoration继续进行一些有趣的自定义View实例讲解,有兴趣可以继续关注Carson_Ho的安卓开发笔记 --

1.9K21

Android RecyclerView 使用完全解析 体验艺术般的控件

整体看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果...那么就必须解释下RecyclerView的这个名字了,从它看,RecyclerView代表的意义是,我只管Recycler View,也就是说RecyclerView只管回收与复用View,其他的你可以自己去设置...接下来我们看一个RecyclerView.ItemDecoration的实现,该类很好的实现了RecyclerView添加分割线(当使用LayoutManager为LinearLayoutManager...,则不需要绘制底部;如果是最后一列,则不需要绘制右边,整个判断也考虑到了StaggeredGridLayoutManager的横向和纵向,所以稍稍有些复杂。...ok,到此我们基本介绍了RecylerView常见用法,包含了: 系统提供了几种LayoutManager的使用; 如何通过自定义ItemDecoration去设置分割线,或者一些你想作为分隔的drawable

1.6K10
  • RecycleView从0到0.1 | 技术创作特训营第一期

    一、文章快速总结RecycleView是安卓的列表,可以灵活控制每一项的数据,布局,动画。Adaper是整体适配器,逻辑放在这里。Holder是每一项的内容,把控件初始化放在这里。...说白了就是ui的列表,可以很灵活的控制列表中每一项的数据,布局,动画。三、RecycleView的优点 1、支持局部刷新。 2、可以自定义item增删时的动画。...可以看到该适配器主要有3个方法和1个自定义ViewHolder组成:onCreateViewHolder: 创建ViewHolder并返回,后续item布局里控件都是从ViewHolder中取出。...可以通过继承RecyclerView.ItemDecoration来实现。...我们可以在RecyclerView的Adapter中自定义一个接口,并创建一个供其他设置监听的方法。

    43411

    Android RecyclerView八个必会的面试技巧

    引言 在Android开发领域,RecyclerView是一项强大的工具,用于处理大量数据的高效显示。熟练掌握RecyclerView的知识对于一名Android开发者来说至关重要。...ItemDecoration: 用于在Item之间添加装饰,如分隔线或空白间距。在定制列表外观时,ItemDecoration发挥了关键作用。...RecyclerView的绘制流程 问题: 能详细描述RecyclerView的绘制流程吗?从数据源到最终显示在屏幕的过程?...ItemDecoration绘制: 如果有设置ItemDecoration,RecyclerView会在绘制之前调用相应的方法,绘制分隔线等装饰。...参考简答:ViewHolder模式通过在Adapter中创建一个ViewHolder,用于缓存Item中的View对象。这样在滑动过程中,可以避免频繁地调用findViewById。

    29520

    Android ItemDecoration 实现分组索引列表的示例代码

    我们要实现的效果主要涉及三个部分: 分组 GroupHeader 分割线 SideBar 前两个部分涉及到一个ItemDecoration,也是我们接下来的重点,该类是RecyclerView的一个抽象静态内部类...所以其绘制的内容会遮挡在RecyclerView,因此我们可以在该方法中绘制分组索引列表中悬浮的GroupHeader,也就是在列表顶部随着列表滚动切换的GroupHeader。...最后就是悬浮在顶部的GroupHeader绘制了: public class GroupHeaderItemDecoration extends RecyclerView.ItemDecoration...这里先用一个接口,对外提供自定义绘制GroupHeader的方法: public interface OnDrawItemDecorationListener { /** * 绘制GroupHeader...,那用它来优雅的实现为何不可呢,我们只需要给列表中每组数据除了最后一项数据对应的ItemView之外的添加分割线即可,也就是不给每组数据对应的最后一个ItemView添加分割线。

    1.8K20

    【Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView )

    = null) { // 使用前 , 清空所有的回调 // 使用前重置 destroyCallbacks(); } 最后...(this); // 添加了每个条目的触摸监听器 mOnItemTouchListener // 该监听器是定义在 ItemTouchHelper 中的成员变量...requestLayout(); } } 3、RecyclerView.ItemDecoration 源码分析 ItemDecoration 是抽象 , 核心逻辑必须由子类实现后才可以使用...的实现 DividerItemDecoration , 该类中重写了 onDraw 方法 , 其中调用了 drawVertical 绘制垂直分割线 , 调用了 drawHorizontal 方法绘制水平分割线...中 , 不仅仅只能绘制分割线 , 可以绘制任何图形 , 图片 , 颜色 , 与自定义组件绘制功能一样强大 ; 三、博客资源 博客资源 : GitHub 地址 : https://github.com/

    38420

    RecyclerView探索之通过ItemDecoration实现StickyHeader效果

    先确定 Header 的 Rect 范围,然后绘制,再在合适的位置绘制 Header 的 title。...之前 Header 的绘制由组内第一个 ItemView 决定,但是 StickyHeader 由于悬停功能的添加,所以它是由屏幕可见的组内的第一个 ItemView 来决定,每一个 ItemView...当前的 ItemView 不是屏幕的第一个可见的 ItemView,但是它是组内的第一个 ItemView,所以这个时候按照绘制普通 Header 的逻辑绘制 StickyHeader 就可以了。...关键一环就是如何确定某个 ItemView 是不是组内的最后一个 ItemView。所以,首先我们得升级我们的 GroupInfo 。...编写自定义ItemDecoration,处理好 getItemOffsets 方法中 Header 的绘制范围。 4. 根据是否是第一个 Header 决定 Header 是否悬停。

    1.2K10

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

    带分割线的列表式RecyclerView--LinearItemDecoration RecyclerView提供了addItemDecoration接口与ItemDecoration用来定制分割线样式...insets.bottom += mTempRect.bottom; } lp.mInsetsDirty = false; return insets; } 一般而言,不会同时设置多ItemDecoration...,太麻烦,对于普通的线性布局列表,其实就简单设定一个自定义ItemDecoration即可,其中outRect参数主要是控制每个Item上下左右的分割线所占据的宽度跟高度,这个尺寸跟绘制的时候的尺寸应该对应...的onDraw,绘制分割线或者其他辅助信息,ItemDecoration 支持上下左右四个方向定制占位分割线等信息,具体要绘制的样式跟位置都完全由开发者确定,所以自由度非常大,其实如果不是太特殊的需求的话...需要在四个方向上对其ItemDecoration进行限制,来看一下其实现GridLayoutItemDecoration的getItemOffsets: @Override public void getItemOffsets

    2.6K41

    Android RecyclerView打造悬浮效果的实现代码

    实现思路: 利用RecyclerView.ItemDecoration绘制Province(就像绘制分割线一样) 同一组的City,只绘制一个Province 计算偏移,将当前Province固定在顶部...因此,可能很多同学认为ItemDecoration就是用来绘制分割线的。其实不然,ItemDecoration的功能远不止是分割线的绘制。...onDraw:通过该方法,在Canvas绘制内容,在绘制Item之前调用。...实现下一组滑时候,当前分组移;一组下滑的时候,当前分组下移。 最后计算baseLine,并绘制背景和文字。 到目前为止,一个带有悬浮功能的列表就实现了。 (详细代码见底部链接) ?...来个自定义布局?那就来个自定义布局吧。 实现 实现的原理跟上面一样,由于需要自定义布局,所以需要在接口中添加一个获取View的方法。

    1.8K50

    Android 中为RecyclerView控件添加分隔线

    我们要继承RecyclerView.ItemDecoration并且重写里面的方法来实现,一般来说,一个自定义ItemDecoration的基本写法: public class ItemDecoration...extends RecyclerView.ItemDecoration { // 在这个方法中绘制分隔线,这个方法会在RecyclerView中的子项绘制完成之前被调用 @Override...下面用一个小例子来看一下RecyclerView.ItemDecoration的具体用法,新建一个Android工程: 首先,如果我们要使用RecyclerView控件,我们必须对它添加构建依赖:...我们对文章开始的继承于 RecyclerView.ItemDecoration 自定义来进行改写,加入我们自己的逻辑: 在工程中新建一个MyItemDecoration.java: import...,下同 myDivider.draw(canvas); // 在Canvas对象绘制区域 child = parent.getChildAt

    2.1K10

    【Android】RecyclerView:打造悬浮效果

    实现思路: 利用RecyclerView.ItemDecoration绘制Province(就像绘制分割线一样) 同一组的City,只绘制一个Province 计算偏移,将当前Province固定在顶部...因此,可能很多同学认为ItemDecoration就是用来绘制分割线的。其实不然,ItemDecoration的功能远不止是分割线的绘制。...onDraw:通过该方法,在Canvas绘制内容,在绘制Item之前调用。...实现下一组滑时候,当前分组移;一组下滑的时候,当前分组下移。 最后计算baseLine,并绘制背景和文字。 到目前为止,一个带有悬浮功能的列表就实现了。...来个自定义布局?那就来个自定义布局吧。 实现 实现的原理跟上面一样,由于需要自定义布局,所以需要在接口中添加一个获取View的方法。

    3K100

    关于RecyclerView你知道的不知道的都在这了(下)目录正文

    想要自定义 Item 动画,真的可以来参考、借鉴这个的实现,能学到的东西很多。...大体的流程原理就是这样,当然,这个做的事肯定不止这些,还包括了集合的清理维护工作,动画的维护等等,所以很值得去借鉴学习一番。但这里就只给出大概的流程,本篇重点不在这里。...前两个都是 public 权限,最后一个包权限,下面分别看看它们都有哪些效果,最后再来看看如何自定义。...20180105202823469.gif 8.3 FastScroller 这个也是继承自 ItemDecoration,但它的权限只是包权限,不开放给外部使用,稍微看了下注释,说是用来处理动画以及快速滑动相关的支持...时,只有一个方向会生效,那么下面我们就以 GridLayoutManager 为例,来看看,如何自定义ItemDecoration

    1.3K30

    又来新需求了,急,Android怎么实现时间线效果?

    :用于确定圆的半径 offset:用于表示圆点到item顶部的距离 并且在getItemOffsets中留出绘制整个时间线的空间,即item的左边距 最重要的工作内容是我们计算并绘制了圆和线(具体的计算可以看代码...最后一个item不画 if (i !...应用到一个RecyclerView康康效果: rv_timeline1.adapter = RecordAdapter(ArrayList())// 省略构造假数据 rv_timeline1...为了实现这个需求,他陷入了深深的沉思: 数据中肯定不可能耦合颜色这种UI实现,所以需要一个由状态获取颜色的办法 由于画一个item还需要知道上一个item的颜色,干脆直接把整个数据源列表data传入ItemDecoration...否则会出现【当前屏幕可见的最后一项不是真正的最后一项,但它却没有下线,但向下滑动后它又有下线了】的尴尬场景 注意到此时用于判断是否为最后一个item的方法,从count - 1变为了data.size

    47500

    Android自定义View实战 :如何优雅实现一个时间轴显示控件?

    :手把手教你写一个完整的自定义View Carson带你学Android:Canvas全面解析 Carson带你学Android:Path全面解析 目录 1....(含实例讲解) 1.2 自定义View 具体请看文章 Canvas的最全面详解 - 自定义View应用系列 2....RecyclerView.ItemDecoration 初始化 RecyclerView & 绑定数据 特别注意 步骤1、2、3、5都用到RecyclerView的基本知识,请看文章Android...RecyclerView.ItemDecoration 此步骤就是该实例的实现关键,具体思路请看下图: 阅读前请先看文章:教你玩转 Android RecyclerView:深入解析 RecyclerView.ItemDecoration...带你学Android:手把手教你写一个完整的自定义View Carson带你学Android:Canvas全面解析 Carson带你学Android:Path全面解析

    1.6K20

    小甜点,RecyclerView 之 ItemDecoration 讲解及高级特性实践

    当时它的出现解决了我一个大的需求,这个需求就是在电视盒子界面上横向加载应用列表,由于 ListView 没有横向加载的功能,而网络开源的那些 HorizontalListView 又不满足需求,所以我们只能自定义...首先,我们需要自定义一个 ItemDecoration,按照目前的需求,我们只需要实现它的一个方法就可以了。...事实ItemDecoration 的妙处还有好多好多。 总结 自定义一个 ItemDecoration 通常要根据需要,复写它的 3 个方法。...* getItemOffsets 撑开 ItemView 、下、左、右四个方向的空间 * onDraw 在 ItemView 内容之下绘制图形 * onDrawOver 在 ItemView...提醒 由于文章篇幅,ItemDecoration 最让我兴奋的内容我需要另写一篇文章,那就是通过 ItemDecoration 自定义 RecyclerView 中的头部或者是粘性头部。

    1.1K20
    领券