2015-02-13 4 views
3

Как говорится в документации, вы можете добавить и настроить теневой стиль дизайна материала на android:elevation. Это прекрасно работает со всеми элементами, с которыми я столкнулся.Как добавить тень материала в холст нарисованные элементы?

Но что, если я хочу получить то же (или почти такое же) поведение для фигур, я рисую на Canvas? - В настоящее время я играю с Paint.setShadowLayer(), но результаты далеки от «материального» стиля по сравнению с собственной реализацией.

Есть ли какие-либо библиотеки или способы достижения такого же эффекта? Предпочтительно, добавляя уровень высоты?

ответ

3

Метод Android Lollipop использует для рендеринга теней довольно легко:

  • рисовать черную форму зрения
  • размывания это с ScriptIntrisincBlur
  • рисовать его под видом

Вы можете применить этот метод к своим фигурам. Я выполнил эти шаги в своей библиотеке, способной рисовать тени в реальном времени на всех последних андроидах вплоть до кекса. Вы можете найти его здесь: https://github.com/ZieIony/Carbon/blob/master/carbon/src/main/java/carbon/widget/FrameLayout.java#L207

Edit: ссылка на код тени рисования Android: https://github.com/android/platform_frameworks_base/blob/4d9ffdf95237c4ee59514c678fea6ff157e0eee3/libs/hwui/OpenGLRenderer.cpp#L2507

+1

Это, безусловно, не метод, который использует Android. –

+1

Правда, это метод, используемый для отбрасывания теней (http://android-developers.blogspot.com/2013/08/renderscript-intrinsics.html). Не могли бы вы написать больше о тенях Lollipop? – Zielony