Ombres Android rapides et de haute qualité pour React Native
React Native ne prend en charge que les ombres sur Android via l'hélice d'altitude, mais la réalisation de l'effet souhaité est souvent impossible car il ne vient qu'avec très peu de préréglages. Des bibliothèques tierces ont été créées pour contourner cela, mais lorsqu'ils sont utilisés sur de nombreuses vues, ils peuvent vous rendre plus lent ou augmenter considérablement sa consommation de mémoire.
<View>
shadowRadius
, shadowColor
, shadowOpacity
et shadowOffset
<ShadowedView>
n'est qu'un alias de <View>
npm install react-native-fast-shadow
# or
yarn add react-native-fast-shadow
Usage:
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 ():
L'utilitaire shadowStyle()
peut également être utilisé pour faciliter la création de styles d'ombre et pour conserver des plates-formes d'accross cohérentes d'ombres . Il créera le même accessoire style
que ci-dessus, mais divisera le rayon de l'ombre par 2 sur iOS (comme pour certaines raisons, les ombres iOS sont trop grandes par un facteur 2 par rapport aux outils de conception ou aux barils de boîte de 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 >
Sur Android, Shadow Drawables est généré avec le processus suivant (voir ShadowFactory.java pour plus de détails):
shadowRadius
donné en utilisant l'API RenderscriptshadowColor
/ shadowOpacity
et compensé selon shadowOffset
Comment fonctionne NinePatchDrawable (remarquez comment les coins ne sont pas gardés lorsque le dessin est redimensionné):
React-Native-Fast-Shadow est livré avec les limites suivantes:
<View>
, <ShadowedView>
ne fonctionnera pas avec des vues Freeform. Il s'attend à ce que sa vue descendant directe soit un rectangle arrondi (jusqu'à un cercle). Solutions: Pour les éléments <Text>
mex du Text>, vous pouvez utiliser TextShadowradius. Pour les formes complexes, React-Native-androw est votre meilleure option.<ShadowedView>
et ses enfants ont la même taille, sinon l'ombre sera plus grande que le contenu (vous pouvez penser à <ShadowedView>
comme une vue avec une couleur d'arrière-plan).<ShadowedView>
ou le style de son enfant direct pour déduire les rayons d'angle à appliquer. Si votre hiérarchie de vue est plus complexe, les rayons d'angle peuvent ne pas être déduits correctement. Solution: retravaillez votre hiérarchie de vue ou transmettez le borderRadius
directement à l'hélice style
de <ShadowedView>
. Le tableau suivant compare la consommation de mémoire de react-native-fast-shadow
, réactif-natif-androw et réactif-natif-shadow-2 lors de la rendu 100 150x200pt <Image>
sur un pixel 2 avec une ombre de rayon de 12 pt. L'application a été construite en utilisant la variante de débogage et Hermès.
Pas d'ombre | réactif-natif-shadow-2 | réagir-natif-androw | réactif-natif-fast-shadow |
---|---|---|---|
117 Mo (réf) | 430 Mo (+ 313 Mo) | 403 Mo (+ 286 Mo) | 123 Mo (+ 6 Mo) |