ظلال Android سريعة وعالية الجودة لـ React 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()
لتسهيل إنشاء أنماط الظل والحفاظ على منصات الترحيل المتسقة . سيؤدي ذلك إلى إنشاء نفس style
على النحو الوارد أعلاه ، ولكنه سيقسم نصف قطر الظل على 2 على iOS (كما هو الحال بالنسبة لبعض الأسباب ، تكون ظلال iOS كبيرة جدًا بعامل 2 عند مقارنتها بأدوات التصميم أو إلى CSS Box-shadows):
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 ، يتم إنشاء Shadow Drawles مع العملية التالية (انظر ShadowFactory.java لمزيد من التفاصيل):
shadowRadius
المعطى باستخدام API RenderscriptshadowColor
/ shadowOpacity
ويتم تعويضها وفقًا لـ shadowOffset
كيف يعمل NinePatchDrawlable (لاحظ كيف لا يتم تحريك الزوايا عند تغيير حجم السحب):
ويأتي شادو-فايف-وايطا مع القيود التالية:
<View>
، لن يعمل <ShadowedView>
مع طرق عرض Freeform. وتتوقع أن تكون وجهة نظر النسل المباشر مستطيلًا مستديرًا (يصل إلى دائرة). الحلول: للعناصر المظللة <Text>
، يمكنك استخدام TextShadowRadius. بالنسبة للأشكال المعقدة ، فإن React-Itist-Androw هو أفضل خيار لك.<ShadowedView>
وأطفاله لديهم نفس الحجم ، وإلا فإن الظل سيكون أكبر من المحتوى (يمكنك التفكير في <ShadowedView>
كطريقة عرض مع لون الخلفية).<ShadowedView>
أو نمط طفلها المباشر لاستنتاج نصف قطر الزاوية للتطبيق. إذا كان العرض الهرمي الخاص بك أكثر تعقيدًا ، فقد لا يتم استنتاج نصف قطر الزاوية بشكل صحيح. الحل: أعد صياغة عرض التسلسل الهرمي أو تمرير borderRadius
مباشرة إلى نمط style
من <ShadowedView>
. يقارن الجدول التالي استهلاك الذاكرة لـ react-native-fast-shadow
و React-Native-Androw و React-Native-SHADOW-2 عند تقديم 100 150 × 200PT <Image>
على بكسل 2 مع ظل نصف قطرها 12pt. تم بناء التطبيق باستخدام تبديل Debug و Hermes.
لا ظل | رد الفعل-الشادو -2 | رد الفعل-أندرو | رد الفعل-الصيفية-الصراخ |
---|---|---|---|
117 ميغابايت (المرجع) | 430 ميجابايت (+313 ميجابايت) | 403MB (+286 ميجابايت) | 123 ميجابايت (+6 ميجابايت) |