Подтвердить что ты не робот

Android: возвышение только имеет эффект тени на нижней стороне, как заставить эффекты тени показать на верхней стороне?

Я использую framelayout в нижней части действия, чтобы показать эффекты тени на фрагменте, я добавляю android: elevation. Но теневые эффекты появляются только в нижней части не сверху, кто-нибудь может дать мне несколько советов?

<FrameLayout
    android:id="@+id/bottom_container"
    android:background="#00737f"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_gravity="bottom"
    android:elevation="4dp"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dp"/>
4b9b3361

Ответ 1

Существует трюк, который можно использовать для отображения тени над представлением.

В основном мы должны использовать два вложенных макета, где внешний макет бросает тень с помощью elevation, а внутренний макет устанавливает background. Затем, установив a padding во внешний макет, мы можем сдвинуть внутренний макет вниз, не перемещая тень, тем самым становится больше видимой тени:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="50dp"
    android:elevation="4dp"
    android:outlineProvider="bounds"
    android:paddingTop="2dp"
    android:layout_marginTop="-2dp">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#00737f">

        <!-- content -->

    </FrameLayout>

</FrameLayout>

Важным здесь является атрибут outlineProvider, который требуется, чтобы внешний макет отображал тень даже без установки фона.

Далее мы укажем отрицательный margin, чтобы компенсировать смещение, созданное дополнением. В зависимости от варианта использования мы можем опустить это.

Но внимание: если мы слишком сильно переместим View, некоторые видимые артефакты становятся видимыми:

примеры смещения тени для андроида

Источник этого примера в Github