Android RecycleView 只增加顶部透明渐变效果fadingEdge

问题

UI要求给列表指定区域添加顶部透明渐变效果,效果如下图:


效果图

滑动的时候,顶部固定20dp的位置要透明渐变。

增加顶部和底部透明渐变效果

有API可以直接实现这种边缘衰弱效果(即透明渐变),代码如下:

    <!--  聊天列表  -->
    <com.riselinkedu.parent.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="256dp"
        android:layout_height="144dp"
        android:overScrollMode="never"
        android:fadingEdgeLength="20dp"
        android:requiresFadingEdge="vertical"
        android:background="@color/transparent"
        android:layout_marginStart="12dp"
        android:layout_marginBottom="50dp"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        />

关键代码:

        android:fadingEdgeLength="20dp"
        android:requiresFadingEdge="vertical"

fadingEdgeLength 区域大小,requiresFadingEdge 渐变方向

这样添加之后,会发现 顶部和底部 都有了透明渐变效果。

只增加顶部透明渐变效果

然而,UI只要顶部有透明渐变,底部不要。

通过查源码发现两个方法如下:

    override fun getTopFadingEdgeStrength(): Float {
        return super.getTopFadingEdgeStrength()
    }

    override fun getBottomFadingEdgeStrength(): Float {
        return super.getBottomFadingEdgeStrength()
    }

分别返回的是 fadingEdge 的顶部及底部的效果区域。

此时,一个解决方案就有了,重写 getBottomFadingEdgeStrength 方法,返回值为0f

    override fun getBottomFadingEdgeStrength(): Float {
        return 0f
    }

最终和预想的结果一样,底部效果区域返回为0f ,就去掉了透明渐变效果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容