Intereting Posts
Как проверить, доступна ли сеть на Android и iOS (Delphi XE5) Как отображать всплывающее окно при наведении наложения в Android? Текстовая анимация слева направо, как блеск в Android Ошибка входа в Facebook на некоторых устройствах Galaxy S3 – съемка в портретном режиме разрушает активность Offline maps SDK для Android и iOS Можем ли мы получить доступ к микрофонному драйверу моего телефона Android Android Icons: начальный экран и меню приложений Чисто функциональное программирование на Android Eclipse зависает на загрузчике содержимого Android SDK Как заставить RecyclerView прокручивать, когда предметов недостаточно, чтобы заполнить высоту sceen Проблема с коммутатором – отображается только одна опция Вход в Facebook в мобильном приложении Предварительный просмотр Honeycomb – не удается установить мое приложение на эмулятор под Eclipse Выполнение не выполнено для задачи ': app: dexDebug' Android Studio

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"/>