Android 支持 CardView 的阴影问题

Android support CardView issues with shadows

我正在使用 android.support.v7.widget.CardView 库并遇到一些问题。

这里我使用一些边距简单地堆叠了 3 CardViews。 运行 它在 Android L 前 2 张卡片的顶部阴影不是 seen/drawn。

这里是API16级抽牌。

是否可以始终绘制顶部阴影?

谢谢。

编辑:xml代码

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="16dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    app:cardBackgroundColor="@color/white"
    app:cardCornerRadius="@dimen/card_view_corner_radius"
    app:cardUseCompatPadding="true" />

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="16dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:layout_marginTop="4dp"
    app:cardBackgroundColor="@color/white"
    app:cardCornerRadius="@dimen/card_view_corner_radius"
    app:cardUseCompatPadding="true" />

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="8dp"
    app:cardBackgroundColor="@color/white"
    app:cardCornerRadius="@dimen/card_view_corner_radius"
    app:cardPreventCornerOverlap="true"
    app:cardUseCompatPadding="true">

试试这个:

<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="8dp"
    card_view:cardBackgroundColor="@color/white"
    card_view:cardCornerRadius="@dimen/card_view_corner_radius"
    card_view:cardElevation="4dp" />

也许cardElevation去做。

根据我的研究,我认为 GPU 绘图随海拔高度更新会导致此问题。由于卡片处于相同的海拔高度和相同的背景,因此平台将它们混合在一起。这就是旧版本绘制一些边框的原因,因为它不支持提升。

我的解决方法是为底部卡片添加 0dp 高度,然后为中间卡片添加 1dp,顶部卡片保持默认高度,即 2dp。现在可以看到轻微的边框。