Быстрые и высококачественные тени Android для Great Native
React Native поддерживает только тени на Android через подъемную опору, но достижение желаемого эффекта часто невозможно, поскольку он поставляется только с очень небольшими пресетами. Сторонние библиотеки были созданы, чтобы обойти это, но при использовании во многих представлениях они могут сделать вас приложением медленнее или значительно увеличить потребление памяти.
<View>
shadowRadius
, shadowColor
, shadowOpacity
и shadowOffset
<ShadowedView>
- это просто псевдоним <View>
npm install react-native-fast-shadow
# or
yarn add react-native-fast-shadow
Использование:
import { ShadowedView } from 'react-native-fast-shadow' ;
< ShadowedView
style = { {
shadowOpacity : 0.4 ,
shadowRadius : 12 ,
shadowOffset : {
width : 5 ,
height : 3 ,
} ,
} }
>
< Image source = { require ( './kitten.png' ) } style = { { borderRadius : 30 } } / >
< / ShadowedView >
Shadowstyle ():
Утилита shadowStyle()
также может быть использована, чтобы облегчить создание стилей тени и поддерживать тени последовательными платформами Accoss. Он создаст ту же опору style
, что и выше, но разделяет радиус тени на 2 на iOS (что по некоторым причинам, тени iOS слишком велики в 2 раза по сравнению с инструментами проектирования или с коробками CSS):
import { ShadowedView , shadowStyle } from 'react-native-fast-shadow' ;
< ShadowedView
style = { shadowStyle ( {
opacity : 0.4 ,
radius : 12 ,
offset : [ 5 , 3 ] ,
} ) }
>
< Image source = { require ( './kitten.png' ) } style = { { borderRadius : 30 } } / >
< / ShadowedView >
На Android теневые натягиваемые создаются с помощью следующего процесса (см. Shadowfactory.java для получения более подробной информации):
shadowRadius
с использованием API рендеровshadowColor
/ shadowOpacity
и компенсируется в соответствии с shadowOffset
Как работает NinePatchDrawable (обратите внимание на то, как углы не строятся при изменении притяжения):
React-C-Fast-Shadow поставляется со следующими ограничениями:
<View>
, <ShadowedView>
не будет работать с свободными представлениями. Он ожидает, что его прямой потомковый вид станет округлым прямоугольником (до круга). Решения: для затенения <Text>
Элементы вы можете использовать TextShadowRadius. Для сложных форм React-Clinate-Androw-ваш лучший вариант.<ShadowedView>
и его дети имеют такой же размер, в противном случае тень будет больше, чем содержание (вы можете думать о <ShadowedView>
как представление с цветом фона).<ShadowedView>
или стиль его прямого ребенка, чтобы вывести угловые радиусы для применения. Если ваша иерархия просмотра более сложна, угловые радиусы могут быть выведены неправильно. Решение: переработайте иерархию вашего взгляда или передайте borderRadius
непосредственно к style
Prop of <ShadowedView>
. В следующей таблице сравнивается потребление памяти от react-native-fast-shadow
, реагирующих, а также и реагирующих-известных-кад-2, когда рендеринг 100 150x200pt <Image>
на пикселе 2 с тени радиуса 12pt. Приложение было построено с использованием варианта отладки и Гермеса.
Нет тени | React-Cnative-Shadow-2 | Реактивно-родной и рост | Реактивно-пастбище |
---|---|---|---|
117 МБ (ссылка) | 430 МБ (+313 МБ) | 403 МБ (+286 МБ) | 123 МБ (+6 МБ) |