問題
UI要求給列表指定區(qū)域添加頂部透明漸變效果,效果如下圖:

效果圖
滑動(dòng)的時(shí)候,頂部固定20dp的位置要透明漸變。
增加頂部和底部透明漸變效果
有API可以直接實(shí)現(xiàn)這種邊緣衰弱效果(即透明漸變),代碼如下:
<!-- 聊天列表 -->
<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"
/>
關(guān)鍵代碼:
android:fadingEdgeLength="20dp"
android:requiresFadingEdge="vertical"
fadingEdgeLength 區(qū)域大小,requiresFadingEdge 漸變方向
這樣添加之后,會(huì)發(fā)現(xiàn) 頂部和底部 都有了透明漸變效果。
只增加頂部透明漸變效果
然而,UI只要頂部有透明漸變,底部不要。
通過查源碼發(fā)現(xiàn)兩個(gè)方法如下:
override fun getTopFadingEdgeStrength(): Float {
return super.getTopFadingEdgeStrength()
}
override fun getBottomFadingEdgeStrength(): Float {
return super.getBottomFadingEdgeStrength()
}
分別返回的是 fadingEdge 的頂部及底部的效果區(qū)域。
此時(shí),一個(gè)解決方案就有了,重寫 getBottomFadingEdgeStrength 方法,返回值為0f
override fun getBottomFadingEdgeStrength(): Float {
return 0f
}
最終和預(yù)想的結(jié)果一樣,底部效果區(qū)域返回為0f ,就去掉了透明漸變效果。