Как настроить тень на просмотр в Android?
Я хочу знать, как добавить теневой слой в любой общий вид в Android. например: предположим, что у меня есть макет xml, показывающий что-то вроде этого.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
<Button....
...
</LinearLayout>
Теперь, когда он отображается, я хочу, чтобы вокруг него была тень.
Ответы
Ответ 1
Есть простой трюк, используя два вида, которые образуют тень.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:background="#CC55CC">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0">
<TableRow>
<LinearLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:text="@string/hello" />
</LinearLayout>
<View
android:layout_width="5dp"
android:layout_height="fill_parent"
android:layout_marginTop="5dp"
android:background="#55000000"/>
</TableRow>
</TableLayout>
<View
android:layout_width="fill_parent"
android:layout_height="5dp"
android:layout_marginLeft="5dp"
android:background="#55000000"/>
</LinearLayout>
</FrameLayout>
Надеюсь на эту помощь.
Ответ 2
Лучший способ создать тень - использовать образ 9patch
в качестве
фон представления (или ViewGroup
, который обертывает представление).
Первый шаг - создать png-изображение с тенью вокруг него. я
используемый фотошоп для создания такого изображения. Это действительно просто.
- Создайте новое изображение с помощью Photoshop.
- Добавьте слой и создайте черный квадрат 4x4.
- Создайте тень на слое, выбрав слой в слое
проводник и нажав кнопку fx и выбрав тень.
- Экспортируйте изображение как png.
Следующим шагом будет создание рисунков с 9 патчами из этого изображения.
- Откройте
draw9patch
из android-sdk/tools
- Откройте изображение в
draw9patch
- Создайте 4 черные линии на четырех сторонах квадрата, как
затем, а затем сохраните изображение как
shadow.9.png
.
Теперь вы можете добавить эту тень в качестве фона видов, которые хотите
добавьте тень. Добавьте shadow.9.png
в res/drawables
. Теперь добавьте его
в качестве фона:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/shadow"
android:paddingBottom="5px"
android:paddingLeft="6px"
android:paddingRight="5px"
android:paddingTop="5px"
>
Недавно я написал сообщение в блоге, которое объясняет это подробно и
включает изображение 9patch, которое я использую для создания тени.
Ответ 3
Предполагая, что u будет использовать линейную компоновку (я рассматривал вертикальную линейную компоновку).. и имею вид чуть ниже линейного макета. Теперь для этого представления предусмотрен цвет начала и конца цвета.
Я также хотел получить эту вещь, ее работа для меня. Если вам нужен еще лучший эффект, то просто обойдите цвет начала и конца.
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/vertical"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="@drawable/layout_back_bgn"
android:orientation="vertical" >
</LinearLayout>
<View
android:layout_below="@+id/vertical"
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@drawable/shadow"
>
</View>
</LinearLayout>
layout_back_bgn.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="#FF4500" />
</shape>
shadow.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="#4D4D4D"
android:endColor="#E6E6E6"
android:angle="270"
>
</gradient>
</shape>
Я попытался опубликовать изображение, которое у меня есть после использования вышеприведенного кода, но stackoverflow не позволяет мне coz, у меня нет репутации... Прокомментируйте это.
Ответ 4
Вы можете использовать высоту, доступную с уровня API 21
Высота представления, представленного свойством Z, определяет визуальный внешний вид его тени: представления с более высоким значением Z более крупные, более мягкие тени. Представления с более высокими значениями Z закрывают представления с более низкие значения Z; однако значение Z представления не влияет на размер просмотра. Чтобы установить высоту представления:
в определении макета, используйте
android:elevation
атрибут. Чтобы установить высоту представления в коде действия, используйте
View.setElevation()
метод.
Источник
Ответ 5
Здесь моя дрянная версия решения... Это модификация найденного решения
здесь
Мне не понравилось, как углы выглядят так, что я их все бледнел...
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--Layer 0-->
<!--Layer 1-->
<!--Layer 2-->
<!--Layer 3-->
<!--Layer 4 (content background)-->
<!-- dropshadow -->
<item>
<shape>
<gradient
android:startColor="@color/white"
android:endColor="@color/white"
android:centerColor="#10CCCCCC"
android:angle="180"/>
<padding android:top="0dp" android:right="0dp" android:bottom="2dp" android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="@color/white"
android:endColor="@color/white"
android:centerColor="#20CCCCCC"
android:angle="180"/>
<padding android:top="0dp" android:right="0dp" android:bottom="2dp" android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="@color/white"
android:endColor="@color/white"
android:centerColor="#30CCCCCC"
android:angle="180"/>
<padding android:top="0dp" android:right="0dp" android:bottom="2dp" android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="@color/white"
android:endColor="@color/white"
android:centerColor="#40CCCCCC"
android:angle="180"/>
<padding android:top="0dp" android:right="0dp" android:bottom="2dp" android:left="0dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="@color/white"
android:endColor="@color/white"
android:centerColor="#50CCCCCC"
android:angle="180"/>
<padding android:top="0dp" android:right="0dp" android:bottom="2dp" android:left="0dp" />
</shape>
</item>
<!-- content background -->
<item>
<shape>
<solid android:color="@color/PostIt_yellow" />
</shape>
</item>
Ответ 6
![введите описание изображения здесь]()
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/dropShadow" />
Используйте только под LinearLayout
Другой метод
![введите описание изображения здесь]()
создать "rounded_corner_bg.xml" в папке /drawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/primaryColor" />
<corners android:radius="4dp" />
</shape>
</item>
<item
android:bottom="2dp"
android:left="0dp"
android:right="0dp"
android:top="0dp">
<shape android:shape="rectangle">
<solid android:color="#F7F7F7" />
<corners android:radius="4dp" />
</shape>
</item>
</layer-list>
Чтобы использовать этот макет android:background="@drawable/rounded_corner_bg"