Intereting Posts
Почему Rcolor.white не работает там, где Color.WHITE? Мое приложение течет. Растровые изображения случайных фигур, которые у меня нет в моей папке с рисунком ImageView: заполнение горизонтального соотношения сторон Android: намерение галереи возвращает resultCode == RESULT_CANCELED Android google maps, google places, северная широта превышает южную широту Получить данные POST с Android Webview Операция курсора в первый раз выполняется так медленно, когда запрашиваются объемные данные. Как решить? Лучший способ обновить TextView, каждую минуту, в минуту XmlPullParserException Бинарная строка XML-файла # 17 тег <vector> требует viewportWidth> 0 Утечка утечки Android WebView Android – Размер буфера MediaPlayer в ICS 4.0 Как избавиться от заполнителя в поле пароля, взятого с метки Как разблокировать InputStream.read () на Android? Переключение с TabHost на фрагменты с помощью Viewpager: куда поместить весь мой код Как передавать файлы между устройствами Android с помощью Wi-Fi Direct?

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