Android:使用Shape为RecyclerView单元格创建框架,导致Overdraw

时间:2016-02-23 19:14:37

标签: android android-recyclerview gpu-overdraw

我正在尝试为RecyclerView的每个单元格添加边框/框架。我能够通过创建“可绘制资源文件”并将其设置为单元格的背景来成功实现这一目标,如下所示:

enter image description here

然而,我意识到这样做,在页面中创建额外的透支并导致性能滞后。所以我尝试将所有布局背景颜色设置为 @null 以避免额外的透支,但我没有成功。你可以比较下面的两个透支(第一张图片有框架,第二图片有没有框架):

使用框架透支:

enter image description here

没有框架的透支: enter image description here

以下是可绘制资源文件的xml代码。我将此布局设置为RecyclerView Cell的背景。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <stroke
                android:width="0.25dp"
                android:color="#000000" />
            <corners
                android:bottomLeftRadius="5dp"
                android:bottomRightRadius="5dp"
                android:topLeftRadius="5dp"
                android:topRightRadius="5dp"/>
            <solid
                android:color="@null" />
        </shape>
    </item>
</selector>

请帮我解决这个透支问题。此外,如果您知道为单元格创建框架/边框的任何其他方法,而不创建额外的透支,我感谢您与我分享。

1 个答案:

答案 0 :(得分:1)

我建议使用CardView代替RecyclerView,以便您可以像这样设置app:cardPreventCornerOverlap="false"

<android.support.v7.widget.CardView
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardCornerRadius="2dp"
    app:cardElevation="2dp"
    app:cardPreventCornerOverlap="false"
    app:contentPadding="0dp">

</android.support.v7.widget.CardView>