Intereting Posts
Несколько операторов if Приложение неправильно сконфигурировано для входа в систему Facebook с помощью ключа ключа Хэш Студия Android: INSTALL_FAILED_CONFLICTING_PROVIDER facebook sdk Не удалось запустить службу намерения GCM «ОК» добавить последнее ключевое слово к унаследованному / переопределенному методу? Почему 0dp считается улучшением производительности? LinearLayout не заполняет scrollview Не удалось загрузить класс дескриптора модуля: не нашел класс «com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor» Как получить контактную информацию URI Как использовать PlaceFilter с Place Picker? Получение фрагмента карты Google в onCreateView с помощью вкладок ActionBar Значение хеш-карты Google Maps не принимается (конвертировать SHA1 в MD5?) Android Studio preDexDebug после добавления файла jar Как реализовать пакет NumberPicker в Android API 7? Добавление контента в диалоговое окно фида Facebook с новым SDK для Android для Android

Android Drop Shadow on View

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

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

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

Вы можете использовать комбинацию 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"/>