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

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


person New to android development    schedule 02.12.2011    source источник
comment
Думаю, вы ищете это: stackoverflow.com/questions / 3693234 / Надеюсь, это вам поможет.   -  person Rohit Mandiwal    schedule 02.12.2011
comment
Возможно, я ошибаюсь, но вы используете тень текста на TextView. Это хорошо. Вы просите тень блока на ImageView. Я не верю, что это существует. Для этого вам нужно создать собственный фон, который выглядел бы как тень.   -  person Matthew Rudy    schedule 02.12.2011
comment
возможный дубликат Custom ImageView с падающей тенью   -  person Sergey Glotov    schedule 21.03.2012
comment
android:elevation="2dp" иногда бывает достаточно   -  person ekashking    schedule 31.05.2020
comment
Похоже, android:elevation работает, только если вы определили android:background. Без определения обоих я вообще не получаю тени.   -  person Enve    schedule 09.11.2020


Ответы (6)


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

dependencies {
    compile 'com.android.support:cardview-v7:23.0.1'
    -------
}

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

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

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@android:color/white">

    <ImageView
        android:id="@+id/dish_image"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:adjustViewBounds="true" />

</android.support.v7.widget.CardView>

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

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

person Mahendran Sakkarai    schedule 06.10.2015
comment
Как заявлен card_view? - person ban-geoengineering; 18.01.2017
comment
... так же, как обычно объявляется app xmlns. - person ban-geoengineering; 18.01.2017
comment
А как насчет круга ImageView? - person user924; 17.12.2018
comment
@ user924 Я уже давно вижу этот ответ :-). Cardview внутренне с использованием повышения для устройств более высокого уровня. Для устройств более низкого уровня используется собственный рисунок на холсте. Так что лучше см. здесь источник для получения дополнительной информации. Мне потребуется время, чтобы обновить ответ. - person Mahendran Sakkarai; 17.12.2018

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

Paint mShadow = new Paint(); 
// radius=10, y-offset=2, color=black 
mShadow.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
// in onDraw(Canvas) 
canvas.drawBitmap(bitmap, 0.0f, 0.0f, mShadow);

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

ПРИМЕЧАНИЯ

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

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

Ответ взят из здесь

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

android:elevation="5dp"
person Avinash Verma    schedule 15.02.2016
comment
android:elevation не работает в ImageView - person tmm1; 10.01.2018
comment
Повышение уровня было добавлено в api 21. Возможно, вы используете более раннюю версию. Используйте макет карты для более низкой версии API. - person Avinash Verma; 10.01.2018
comment
Я использую API 24. Elevation отлично работает с большинством вещей, но не с ImageView. - person tmm1; 10.01.2018
comment
Что такое bitmap? - person Piotr Aleksander Chmielowski; 16.12.2018
comment
Ваше изображение будет соответствовать родительской высоте и ширине, попробуйте указать поля или отступы. Поскольку отметка будет скрыта за другим макетом. - person Avinash Verma; 17.12.2018
comment
получить растровое изображение из изображения. Вызовите это после того, как изображение будет полностью загружено, иначе вы получите null. Bitmap bm = ((BitmapDrawable) imageView.getDrawable ()). GetBitmap (); - person Avinash Verma; 17.12.2018

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

<?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="@android:color/darker_gray" />
            <corners android:radius="0dp"/>
        </shape>
    </item>
    <item android:right="1dp"  android:bottom="2dp">
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="1dp"/>
        </shape>
    </item>

</layer-list>

И используйте это как android: background = "@ drawable / shadow_rect в вашем Imageview.

person Harry    schedule 13.07.2016

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

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

person stdout    schedule 15.02.2016

ImageView

  <ImageView
     ......
  android:elevation="2dp"
  android:background="@drawable/myrect"/>

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

<!-- res/drawable/myrect.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
    <solid android:color="#42000000" />
    <corners android:radius="5dp" />
</shape>
person Suresh Suthar    schedule 25.01.2020
comment
вы пытались понять, о чем спрашивает OP? - person Manti_Core; 02.02.2020

вы можете использовать свойство outlineSpotShadowColor

чтобы установить тень на истинное, попробуйте setOutlineSpotShadowColor с @color/black и увеличьте elevation до 12dp

, чтобы установить тень на false setOutlineSpotShadowColor с помощью @android:color/transparent и уменьшить elevation

person Aymane Rizke    schedule 28.10.2020