如何减少android中以下项目在回收站视图中的固定阴影效果

时间:2018-11-22 14:45:08

标签: android android-recyclerview

enter image description here 这是我的图像,我已使用卡片视图在recyclerview视图中显示项目。下面是xml

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">   
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    <TextView
        android:id="@+id/cardTicketName"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Here will be the text"
        android:textColor="#484848"
        android:padding="20dp"
        android:textSize="15dp" />
    </LinearLayout>
</android.support.v7.widget.CardView>

项目底部阴影下方的阴影大于顶部阴影,并且当我们将顶部项目滚动到底部然后底部的阴影增加,并且再次滚动到顶部相同项目时,阴影效果会降低

如何解决此问题?

4 个答案:

答案 0 :(得分:1)

Android框架使用两种模拟光源的组合来创建阴影效果。其中之一是一般的环境光,因此所有带有高程的东西都会在所有侧面投射一点阴影。但是,另一个是靠近屏幕顶部的模拟点光源。

此点光源的位置意味着底部阴影始终大于顶部阴影。这也意味着屏幕底部附近的底部阴影始终大于屏幕顶部附近的底部阴影。

没有办法禁用此行为。如果您想使用Android的内置高程/阴影框架,这就是它的工作原理。

您可以通过自定义绘图或使用具有半透明黑色的渐变来模拟自己的阴影,但是与仅仅接受阴影是用户的工作方式和用户所期望的相比,这两种方式都将更加困难

https://material.io/design/environment/light-shadows.html

答案 1 :(得分:0)

card_view:cardElevation="0dp"添加到您的CardView

答案 2 :(得分:0)

尝试

为减少阴影,请减小cardElevation大小。

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        card_view:cardElevation="1dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">   
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <TextView
                android:id="@+id/cardTicketName"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="Here will be the text"
                android:textColor="#484848"
                android:padding="20dp"
                android:textSize="15dp" />
        </LinearLayout>
    </android.support.v7.widget.CardView>

答案 3 :(得分:0)

我最近遇到了同样的问题,这是Ben P.所说的默认行为。另外,还有一个detailed explanation

通常,不建议与系统行为作斗争。但是,如果您需要-有一种简单的方法:

您可以使用官方MaterialShapeDrawable(实际上是Material Components library)中的powerful作为视图的背景。它具有shadowCompatibilityMode属性-您可以将其设置为MaterialShapeDrawable.SHADOW_COMPAT_MODE_ALWAYS,它将绘制假阴影而不是本机阴影。看起来可能像这样:

MaterialShapeDrawable().apply {
            shadowCompatibilityMode = MaterialShapeDrawable.SHADOW_COMPAT_MODE_ALWAYS  // fake shadow instead of native one
            setShadowColor(shadowColor) // you also can define shadow color
            elevation = 4F
            paintStyle = Paint.Style.FILL
}

因此,无论屏幕上的视图在哪里,您都将获得固定的阴影