Android studio как добавить тень

Урок 4. Android Material Design. Установка теней и обрезка View

Перевод документации официального сайта developer.android.com

Рисунок 1. Тени для различных высот view.

Чтобы установить высоту view в макете используйте атрибут android:elevation. Чтобы установить высоту в коде activity, используйте метод View.setElevation().

Чтобы установить смещение, используйте метод View.setTranslationZ().

Новые методы ViewPropertyAnimator.z() и ViewPropertyAnimator.translationZ() позволяют легко анимировать высоту view. Для получения дополнительной информации, смотрите справку по ViewPropertyAnimator и руководство разработчика о свойствах анимации.

Вы так же можете использовать StateListAnimator чтобы установить анимации декларативно. Это особенно полезно в тех случаях, когда изменяется состояние триггера анимации, например, когда пользователь нажимает на кнопку. Для получения дополнительной информации, смотрите Изменение состояния анимации view.

Значение Z измеряется в dp (density-independent pixels).

Настройте тени и контуры

Границы фона drawable view определяют форму его тени. Контуры представляют собой внешнюю форму графического объекта и определяют область для сенсорного отклика.

Рассмотрим view, определенное с помощью фона dravable:

Фон drawable определен как прямоугольник с закругленными углами:

View отбрасывает тень с закругленными углами, после того как фон drawable установил границы view. Создание пользовательского контура переопределяет форму тени view по умолчанию.

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

1. Унаследуйтесь от класса ViewOutlineProvider.
2. Переопределите метод getOutline().
3. Назначьте нового поставщика контура для вашего view с помощью метода View.setOutlineProvider() .

Вы можете создать овальные и прямоугольные очертания с закругленными углами используя методы класса Outlines. Поставщик контура для view по умолчанию получает контур из фона view. Чтобы view не отбрасывала тень, установите значение поставщика контура в null.

Обрежьте view

Обрезание позволяет вам легко изменить форму view. Вы можете обрезать view для совместимости с другими элементами дизайна или изменить форму view в ответ на действия пользователя. Вы можете обрезать view к его области контура с помощью метода View.setClipToOutline() или используя атрибут android:clipToOutline. Только прямоугольник, круг и скругленный прямоугольник поддерживают обрезание, как определено в методе Outline.canClip().

Читайте также:  Как пополнить тройку с андроида

Чтобы обрезать view в форме drawable, установите drawable в качестве фона view (как показано выше), и вызовите метод View.setClipToOutline().

Обрезание view это дорогостоящая операция, поэтому не анимируйте форму, которую вы используете чтобы обрезать view. Для достижения этого эффекта используйте Reveal эффект анимации.

Источник

Как показать тень вокруг linearlayout в android?

Как я могу показать тень для моего линейного макета. Я хочу белый цвет округлый фон с тенью вокруг linearlayout. Я делал это до сих пор. Пожалуйста, помогите мне. Спасибо заранее.

и rounded_rect_shape.xml в каталоге xml

13 ответов

в Android нет такого атрибута, чтобы показать тень. Но возможные способы сделать это:

добавьте простой LinearLayout с серым цветом, над которым добавьте свой фактический макет, с полем внизу и справа, равным 1 или 2 dp

есть 9-патч изображение с тенью и установить его в качестве фона для вашего линейного макета

существует также другое решение проблемы путем реализации списка слоев, который будет выступать в качестве фона для LinearLayoout.

добавить background_with_shadow.xml-файл в res/drawable . Содержащий:

затем добавьте список слоев в качестве фона в LinearLayout.

Ну, это легко достичь .

просто построить GradientDrawable это происходит от Черного и переходит к прозрачному цвету, чем использовать родительские отношения, чтобы поместить вашу форму близко к представлению, которое вы хотите иметь тень, тогда вам просто нужно дать любые значения высоте или ширине .

вот пример, этот файл должен быть создан внутри res/drawable , Я называю это как shadow.xml :

поместите следующий код выше из LinearLayout , например, установите android:layout_width и android:layout_height to fill_parent и 2.3dp , вы будете иметь хороший эффект тени на LinearLayout .

Примечание 1: если вы увеличиваете android:layout_height будет показано больше тени .

примечание 2: использовать android:layout_above=»@+id/id_from_your_LinearLayout» атрибут если вы размещаете этот код внутри RelativeLayout, в противном случае игнорируйте его.

надеюсь, это поможет кто-то.

Читайте также:  What to back up android

для леденца и выше вы можете использовать высота.

для более старых версий:

(toast_frame не работает на KitKat, тень была удалена из тостов)

Источник

Как добавить тень над видом в Android

У меня есть представление о сервере в качестве нижнего колонтитула. Это просто представление, которое вы можете рассматривать как кнопку, текстовое представление или макет (на самом деле я открыт для всего). Вот xml

Итак, как вы можете видеть, ScrollView прокручивается под MyBottomView. Я хочу добавить верхнюю тень к MyBottomView, чтобы он больше походил на Material Design. Как я могу это сделать?

3 ответа

Вот несколько решений этой проблемы — выберите лучшее:

  • В StackOverFlow в сообщении от 22 октября 2012 г. Как отображать тень вокруг linearlayout в android? вы бы прочитали:

В Android нет такого атрибута, чтобы показать тень. Но возможные способы сделать это:

Добавьте простой LinearLayout серого цвета, поверх которого добавьте фактический макет с полями внизу и справа, равными 1 или 2 dp

Создайте изображение из 9 участков с тенью и установите его в качестве фона для вашего линейного макета

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

Добавьте файл background_with_shadow.xml в res/drawable . Содержит:

Затем добавьте список слоев в качестве фона в свой LinearLayout.

  • Еще одно сообщение от StackOverflow, как установить тень для представления в android ?, дает другое решение (с использованием двух представлений, образующих тень):
  • Вы также можете использовать определенные ресурсы Android для имитации эффекта тени. Посмотрите: https://stackoverflow.com/questions/21211870/android-view-shadow или просто прочтите сообщение ниже:

Я использую Android Studio 0.8.6 и не могу найти:

поэтому я нашел это вместо этого:

и это выглядит так:

! [введите описание изображения здесь] [1]

Если вас интересует чистый эффект материального дизайна, прочтите документацию, как показано ниже:

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

Читайте также:  Экран разблокировки андроид экстренный вызов

Это дает что-то вроде прилагаемого снимка экрана.

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

Так что даже в наш век поставщиков возвышений и контуров лучше вместо этого добавить полупрозрачный вид. 🙁

Если вам нужна тень только с одной стороны вида (например, сверху), вы можете добавить еще один вид перед ним и использовать градиентную тень для его фона.

Вот файл градиента top_shadow_gradient.xml , который вы должны сохранить в папке drawable :

И вот пример макета, как его использовать:

Важно: корневой макет должен быть прозрачным ( android:background=»@android:color/transparent» ), а макет «содержимого» должен иметь белый фон ( android:background=»#ffffff» ).

Источник

Как создать тень для кнопки

Как вы можете видеть на картинке, я хочу, чтобы тень за Button . Я создал Button с закругленными углами. Но проблема в том, что я не могу создать тень за этой Button . Как я могу это достичь?

Используйте этот подход, чтобы получить желаемый вид.
Button_selector.xml:

И в вашем XML-макете:

Для Android версии 5.0 и выше

Попробуйте Elevation для других видов.

Ниже версии 5.0,

Для всех просмотров,

Если вы нацеливаете устройства до Lollipop, вы можете использовать Shadow-Layout , так как это легко, и вы можете использовать его в разных типах макетов.

Добавьте теневой макет в файл Gradle :

В верхней части xml-макета, где у вас есть кнопка, добавьте вверху :

Он предоставит пользовательские атрибуты.

Затем вы помещаете вокруг себя макет тени. Button :

Затем вы можете настроить параметры app: в соответствии с вашей теневой тенью.

Здесь моя кнопка с тэгом «cw_button_shadow.xml» под возможностью рисования

Моя кнопка xml, размер вашей высоты и веса

Я пробовал код сверху и сделал свою собственную тень, которая немного ближе к тому, чего я пытаюсь достичь. Может быть, это тоже поможет другим.

Источник

Оцените статью