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"/> 

Solutions Collecting From Web of "Android: возвышение только с эффектами тени на нижней стороне, как заставить эффекты тени показать сверху?"

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

В основном мы должны использовать два вложенных макета, где внешний макет бросает тень с elevation а внутренний макет устанавливает background . Затем, установив 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