问题
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 ,就去掉了透明渐变效果。
网友评论