Вопрос:
Я хочу применить тень к ImageView. Когда я применяю тень к TextView, я получаю его, но он не доходит до 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’
Выход: