Cardview android как убрать тень

Урок 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 эффект анимации.

Источник

Как применить тень к ImageView?

Я хочу применить тень к ImageView . Когда я применяю тень к TextView , я получаю его, но он не доходит до ImageView . Как я могу решить эту проблему?

Мы также можем использовать CardView, который обеспечивает закругленный угол фона и тени. Для этого вам необходимо добавить библиотеку v7 CardView в качестве зависимости к проекту в build.gradle, как показано ниже.

Примечание. Измените 23.0.1 в приведенной выше строке с соответствующей версией.

Поэтому я окружил ImageView с помощью CardView чтобы создать тень, как CardView ниже.

Это добавит тень вокруг изображения.

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

Это взято из презентации Ромена Гая в Devoxx, в формате pdf здесь.

Читайте также:  Андроид x86 системные требования

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

ПРИМЕЧАНИЯ

Не забывайте, что Honeycomb и выше вам нужно вызвать setLayerType(LAYER_TYPE_SOFTWARE, mShadow) , иначе вы не увидите свою тень! (@Dmitriy_Boichenko)

SetShadowLayer , к сожалению, не работает с аппаратным ускорением, что значительно снижает производительность (@Matt Wear)

Ответ, взятый из Здесь

Для Api больше 21.
Вы можете попробовать в xml в imageview или Button: Читайте здесь на сайте разработчика

Создать файл shadow_rect.xml

И используйте это как android: background = “@drawable/shadow_rect в вашем представлении изображений.

Вы можете создать список слоев с возможностью рисования и поместить в него два объекта (чертежи) для изображения и тени.

Позиция теневого элемента и его содержимое могут измениться в зависимости от того, где вы хотите применить тень (верхний, левый, правый, правый и левый и т.д.) и стиль вашей тени.

Для тех, кто хочет загружать большие растровые изображения Эффективно перейдите по этой ссылке: https://developer.android.com/topic/performance/graphics/load-bitmap Это лучший и самый безопасный способ масштабирования изображения на основе устройства.

Тень для круговых изображений

Источник

Удалить тень CardView с одной стороны

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

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

Я попытался с помощью отрицательного поля (- 5dp) применить к CardView и просмотру изображения один за другим,но все время CardView находится над изображением, а не под изображением, так что это не сработало для меня.

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

Может ли кто-нибудь дать предложения о том, как помочь решить эту проблему?

2 ответа

У меня есть CardView внутри ConstraintLayout . Затем это представление раздувается и добавляется к LinearLayout . Я хотел бы, чтобы CardView бросил тень на следующий CardView , но он, кажется, обрезан ConstraintLayout . Как я могу заставить тень elevation отображаться на CardView , не предоставляя.

Посмотрите на эти изображения: Перед масштабированием После масштабирования Моя проблема в том, что CardView действительно масштабируется, но скрывает тень вида карты. Любой suggestions/ideas. Редактировать : После добавления app:cardUseCompatPadding=true ничего не меняется cardUseCompatPadding.

Я выхожу из этой проблемы, создавая пользовательский фон, похожий на вид карты, но без верхней тени.

Создайте один файл XML в папке drawable, поместите этот код внутрь и установите его в фоновом режиме.

Вот цвет для представления карты

Вы можете достичь такого эффекта, создав другое представление, которое выше, чем cardview по оси z. После этого вам нужно установить его свойство outlineProvider в none , чтобы отключить эффект тени, и поместить его на нужный край CardView.

Похожие вопросы:

Следующий код отлично работает на Kitkat, но shadows не видны в Lollipop. На самом деле я могу видеть тень в предварительном просмотре Android Studio, но не во время работы на device/emulator. я.

Я попытался убрать тень с экрана. Я использовал android support v7 Cardview на android v4.4.2 Мой макет выглядит:
Тень не отображается в CardView

Я разрабатываю приложение android, в котором я использовал cardview в качестве элемента сетки GridView . Я столкнулся с проблемой отображения тени для cardview , если я использую также фоновое.

У меня есть CardView внутри ConstraintLayout . Затем это представление раздувается и добавляется к LinearLayout . Я хотел бы, чтобы CardView бросил тень на следующий CardView , но он, кажется.

Читайте также:  Half life portal для андроид

Посмотрите на эти изображения: Перед масштабированием После масштабирования Моя проблема в том, что CardView действительно масштабируется, но скрывает тень вида карты. Любой suggestions/ideas.

В Android я использую RecyclerView . Для элемента RecyclerView я использую CardView в качестве макета элемента, а ниже-макет xml:
CardView в сетке не отображает тень со всех сторон

Недавно я отказался от идеи добавления тени к GridView элементам и реализовал CardViews . Проблема, с которой я сталкиваюсь, заключается в следующем: элементы CardView не отображают тени на границах.

(1 скриншот — видимость ImageView видна, 2 скриншота — пропала) При использовании ImageView с CardView мы можем сказать, что тень вообще не видна (особенно на дисплее смартфона).

У меня есть CardView , определенный как

Источник

Изменение цвета тени CardView

Этот вопрос задавали ВО много раз, но все же я не нашел хорошего решения этой проблемы.

Зачем мне это нужно? Хорошо, потому что проект меня и моей команды разрабатывает, имеет стиль iOS.

9.pathch shadow generator, но 9.pathes — это, по существу, png, и это не дает мне никакой гибкости, и если я буду использовать этот подход, я должен редактировать поля везде. Углеродная библиотека поддерживает пользовательские тени, и их рисуют вне границ вида, но есть проблема с закругленными прямоугольниками, когда библиотека не рисует тени для закругленных углов. используя старую реализацию CardView и переориентируя свой теневой цвет, но она нарисована внутри границ карты, поэтому это не вариант.

Итак, есть ли способ изменить теневой цвет CardView с минимальными изменениями всех файлов макета и с теневой тенью вне представления, как это делает оригинальный CardView?

Подумайте об этом в twitter, где Ник Батчер рассказывает о том, как это реализовать:

Для более низких API Ник разделил суть. Вот результат:

Работа по API 21

Этот метод напрямую не связан с CardView , его можно применять к любому View .

Я думаю о простом решении без использования Java или некоторых библиотек. Вы должны сделать Drawable shape и поместить его в папку с возможностью drawable а затем настроить градиент как тень.

Например, в моем решении я добавил два цвета:

Затем я сделал файл и поместил его в папку с возможностью drawable\card_view_shape.xml

Затем оттуда вам нужно обернуть свой вид (который был бы внутри CardView) в контейнере, LinearLayout как LinearLayout затем применить в качестве фона к контейнеру, который вы хотите видеть как вид карты. Чтобы решить эту проблему, добавьте немного заполнения (Thats your shadow) самому контейнеру. Например, проверьте мой:

Затем результаты выглядят так:

Регулировка нижнего отступов будет выглядеть так:

КОММЕНТАРИЙ
Поскольку я не художник, но если вы играете с ним, вы можете заставить все это выглядеть так же, как CardView проверить некоторые подсказки:

    Помещение нескольких градиентов в форму Отрегулируйте конечные цвета градиентов, чтобы они выглядели более сероватыми Конечные цвета также должны быть немного прозрачными Отрегулируйте видимость вида, чтобы выглядеть как тень и цветной, но сероватый Основной фон «Вид» также имеет значение для приведения реальности. Оттуда редизайн формы выглядит еще более реалистично, как CardView .

Источник

Android 4.4 удалить тень из CardView

Я попытался убрать тень с экрана.
Я использовал android support v7 Cardview на android v4.4.2

Читайте также:  Разблокировать гугл аккаунт андроид zte

Мой макет выглядит:

Как вы можете видеть, я использовал:

Пробовал до сих пор:

Но все же вы можете видеть на изображении, которое я прикрепил, верхнюю тень, которая показалась.

3 ответа

Согласно моему требованию к пользовательскому интерфейсу приложения, ему нужна простая сторона поверх cardview, поэтому ему нужно удалить тень с верхней стороны и прикоснуться к другому виду. Я пытался card_view:cardElevation=0dp но он убрал тень со всех сторон, так что мне это не пригодится. Я.

У меня есть CardView внутри ConstraintLayout . Затем это представление раздувается и добавляется к LinearLayout . Я хотел бы, чтобы CardView бросил тень на следующий CardView , но он, кажется, обрезан ConstraintLayout . Как я могу заставить тень elevation отображаться на CardView , не предоставляя.

Просто добавьте код ниже в тег cardview

и не забудьте добавить

UPDATE

Также попробуйте это поместить ниже коды в cardview

app:cardCornerRadius должен быть больше 0(>0), иначе возникнет исключение

Я использую библиотеку поддержки API 28

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

Чтобы создать карту с тенью, используйте атрибут card_view:cardElevation. CardView использует реальную высоту и динамические тени на Android 5.0 (API уровень 21) и выше и возвращается к программной теневой реализации в более ранних версиях. Для получения дополнительной информации см. Поддержание Совместимости.

Я просто исправил эту проблему, используя вместо этого относительный макет. Просто измените значение CardView на относительный макет, и вы, по сути, получите тот же результат, но без тени

Похожие вопросы:

Следующий код отлично работает на Kitkat, но shadows не видны в Lollipop. На самом деле я могу видеть тень в предварительном просмотре Android Studio, но не во время работы на device/emulator. я.

Как я могу удалить тень из ImageButton в Android? Что является основным ресурсом, который содержит тень?

Я разрабатываю приложение android, в котором я использовал cardview в качестве элемента сетки GridView . Я столкнулся с проблемой отображения тени для cardview , если я использую также фоновое.

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

У меня есть CardView внутри ConstraintLayout . Затем это представление раздувается и добавляется к LinearLayout . Я хотел бы, чтобы CardView бросил тень на следующий CardView , но он, кажется.

В Android я использую RecyclerView . Для элемента RecyclerView я использую CardView в качестве макета элемента, а ниже-макет xml:
CardView в сетке не отображает тень со всех сторон

Недавно я отказался от идеи добавления тени к GridView элементам и реализовал CardViews . Проблема, с которой я сталкиваюсь, заключается в следующем: элементы CardView не отображают тени на границах.

(1 скриншот — видимость ImageView видна, 2 скриншота — пропала) При использовании ImageView с CardView мы можем сказать, что тень вообще не видна (особенно на дисплее смартфона).

Я работаю с CardView в android. Я пытаюсь дать угловой радиус CardView . Я могу сделать это из XML. Код работает ожидаемым образом в Lollipop и выше, но на устройствах android 4.4 я не вижу.

У меня есть CardView , определенный как

Источник

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