Intereting Posts
Пакет com.google.zxing отсутствует в библиотеке штрих-кода Zxing для Android Android onViewClickListener не работает Как получить доступ к родительскому представлению активности в фрагменте Действительно ли React действительно поддерживает Android-фрагменты? Android – Пользовательский диалог – Не удается получить текст из EditText Glide assert: java.lang.IllegalArgumentException: вы должны вызвать этот метод в основном потоке Использовать XML-макет в качестве представления для подкласса View? Как я могу масштабировать фон кнопки? Android – Создать SMS из устаревшего API PDU? Какую мобильную операционную систему я должен кодировать? Регистрировать приемник в службе Сотовый ActionBar Название Shadow Искаженный пользовательский интерфейс Android Невозможно выполнить dex: Java куча пространства Java куча пространства Firebase Cloud Messaging – Android: клик-действие уведомления, когда приложение закрыто, не работает

Как установить тень на просмотр в Android?

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

<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" <Button.... ... </LinearLayout> 

Теперь, когда он отображается, я хочу, чтобы вокруг него была тень.

Solutions Collecting From Web of "Как установить тень на просмотр в Android?"

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

 <?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> 

Надеюсь, эта помощь.

Лучший способ создать тень – использовать изображение 9patch в качестве фона представления (или ViewGroup которое обертывает представление).

Первый шаг – создать png-изображение с тенью вокруг него. Я использовал фотошоп для создания такого изображения. Это очень просто.

  • Создайте новое изображение с помощью Photoshop.
  • Добавьте слой и создайте черный квадрат 4×4.
  • Создайте тень на слое, выбрав слой в проводнике слоев и нажав кнопку fx и выбрав тень.
  • Экспортируйте изображение как png.

Следующим шагом будет создание 9-патч-чертежей с этого изображения.

  • Открыть draw9patch от android-sdk/tools
  • Открыть изображение в draw9patch
  • Создайте 4 черные линии на четырех сторонах квадрата, как shadow.9.png ниже, а затем сохраните изображение как 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, которое я использую для создания тени.

Предполагая, что 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, у меня нет репутации. Простите об этом.

Вы можете использовать высоту, доступную с уровня API 21

Высота представления, представленного свойством Z, определяет визуальный внешний вид его тени: представления с более высокими значениями Z бросают большие, более мягкие тени. Представления с более высокими значениями Z закрывают представления с более низкими значениями Z; Однако значение Z представления не влияет на размер представления. Чтобы установить высоту представления:

В определении макета, используйте

 android:elevation 

атрибут. Чтобы установить высоту представления в коде действия, используйте

 View.setElevation() 

метод.

Источник

Вот моя дрянная версия решения … Это модификация найденного здесь решения

Мне не понравилось, как углы выглядят так, что я все их бледнел …

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

Введите описание изображения здесь

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