Intereting Posts
Пример AlwaysOnHotwordDetector в Android В чем разница между аннотациями @UiThread и @MainThread в Android? Нужен пример, показывающий, как выполнять асинхронные HTTP-запросы Android: измерение размера представления перед рендерингом Android: делает короткое занятие действительно 2 байта? OnActivityResult () не будет вызываться, если вызов для камеры Метатег Viewport не работает в iPhone и Android Являются ли Фрагменты и Фрагменты активными быстрее, чем Действия? Разрешить только iphone / ipad / ipod / android для доступа к файлам в directoy, все остальные перенаправляются на google.com Интеграция Twitter в приложение для Android Уточнение поведения AlarmManager в Android Универсальный загрузчик изображений Android – как правильно настроить спецификации? Android paytm как реализация кошелька Отображение контактов в порядке сортировки ContactsContract.Contact of Content Resolver Смысл масштабирования мета-просмотра Android: что мне не хватает?

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