Я хочу применить тень к ImageView
. Когда я применяю тень к TextView
, я получаю его, но он не доходит до ImageView
. Как я могу решить эту проблему?
Как применить тень к ImageView?
Ответ 1
Мы также можем использовать CardView, который обеспечивает закругленный угол фона и тени. Для этого вам необходимо добавить библиотеку v7 CardView в качестве зависимости к проекту в build.gradle, как показано ниже.
dependencies {
compile 'com.android.support:cardview-v7:23.0.1'
-------
}
Примечание. Измените
23.0.1
в приведенной выше строке с соответствующей версией.
Поэтому я окружил ImageView
с помощью CardView
чтобы создать тень, как 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
который дает идею реализовать то же самое для этого. Если это не хорошо, пожалуйста, сообщите мне причину.
Ответ 2
Это взято из презентации Ромена Гая в 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"
Ответ 3
Создать файл 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 в вашем представлении изображений.
Ответ 4
Вы можете создать список слоев с возможностью рисования и поместить в него два объекта (чертежи) для изображения и тени.
Позиция теневого элемента и его содержимое могут измениться в зависимости от того, где вы хотите применить тень (верхний, левый, правый, правый и левый и т.д.) и стиль вашей тени.
Ответ 5
Для тех, кто хочет загружать большие растровые изображения Эффективно перейдите по этой ссылке: https://developer.android.com/topic/performance/graphics/load-bitmap Это лучший и самый безопасный способ масштабирования изображения на основе устройства.
Ответ 6
Тень для круговых изображений
<de.hdodenhof.circleimageview.CircleImageView
android:src="@drawable/ic_your_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="8dp"
android:layout_marginTop="32dp"
android:id="@+id/imageView"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"/>
Зависимость:
implementation 'de.hdodenhof:circleimageview:3.0.0'
Выход: