Intereting Posts
Как отправить тело веб-контента по электронной почте? Анимация для Android PhoneGap Начало работы с Android «Отсутствует один из следующих» Где можно скачать JDK 1.6u20 64-bit? Создайте проект библиотеки Android с помощью Ant Отсутствующие стили. Правильная ли тема выбрана для этого макета? Как реализовать поиск в автозаполнении в панели действий с помощью http-запроса? Невозможно создать задачи для загрузки Proguard Mapping File.java.lang.IllegalStateException: разрешение конфигурации 'androidTestAnnotationProcessor' Как перехватить события касания от ViewPager.OnPageChangeListener Веб-просмотр не загружается в первый раз Изменение значка навигационного ящика на панели действий android Получить местоположение GPS через службу на Android Почему цвет изображения изменился при сжатии Bitmap.CompressFormat.JPEG Можно ли использовать Butterknife для инъекций представлений в espresso Test clases в android? Как динамически обновлять определенный overlayitem

Android Drop Shadow on View

Я сделал большой поиск примеров кода, но ничего не могу найти.

В частности, я хочу добавить тень к png drawable, которую я использую в ImageView. Этот png drawable представляет собой закругленный прямоугольник с прозрачными углами.

Может ли кто-нибудь указать пример кода, как добавить приличную тень для просмотра в коде или в XML?

Solutions Collecting From Web of "Android Drop Shadow on View"

Вы можете использовать комбинацию Bitmap.extractAlpha и BlurMaskFilter, чтобы вручную создать тень для любого изображения, которое вам нужно отобразить, но это будет работать только в том случае, если ваше изображение загружается или отображается только раз в то время, поскольку процесс дорог.

Псевдокод (может даже компилироваться!):

BlurMaskFilter blurFilter = new BlurMaskFilter(5, BlurMaskFilter.Blur.OUTER); Paint shadowPaint = new Paint(); shadowPaint.setMaskFilter(blurFilter); int[] offsetXY = new int[2]; Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY); /* Might need to convert shadowImage from 8-bit to ARGB here, can't remember. */ Canvas c = new Canvas(shadowImage); c.drawBitmap(originalBitmap, offsetXY[0], offsetXY[1], null); 

Затем поместите shadowImage в свой ImageView. Если это изображение никогда не изменяется, но отображается много, вы можете создать его и кэшировать в onCreate, чтобы обойти дорогостоящую обработку изображений.

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

Для использования теневой тени используйте код ниже

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#ffffff" android:centerColor="#d3d7cf" android:endColor="#2e3436" android:angle="90" /> </shape> 

Использовать выше выпадающего для фона вида

 <View android:id="@+id/divider" android:background="@drawable/black_white_gradient" android:layout_width="match_parent" android:layout_height="10sp" android:layout_below="@+id/buildingsList"/> 

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

 private Bitmap createShadowBitmap(Bitmap originalBitmap) { BlurMaskFilter blurFilter = new BlurMaskFilter(5, BlurMaskFilter.Blur.OUTER); Paint shadowPaint = new Paint(); shadowPaint.setMaskFilter(blurFilter); int[] offsetXY = new int[2]; Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY); /* Need to convert shadowImage from 8-bit to ARGB here. */ Bitmap shadowImage32 = shadowImage.copy(Bitmap.Config.ARGB_8888, true); Canvas c = new Canvas(shadowImage32); c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null); return shadowImage32; } 

Для API 21 (5.0) + добавьте android:elevation="4dp" или android:translationZ="4dp" чтобы просмотреть описание. Документация

Атрибут высоты

Всегда используйте прозрачную тень, чтобы они могли придерживаться любого цвета.

shadow.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#002e3436" android:endColor="#992e3436" android:angle="90" /> </shape> 

И в представлении

 <View android:id="@+id/divider" android:background="@drawable/shadow" android:layout_width="match_parent" android:layout_height="5dp"/>