เงา 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):
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 Drawables ถูกสร้างขึ้นด้วยกระบวนการต่อไปนี้ (ดู ShadowFactory.java สำหรับรายละเอียดเพิ่มเติม):
shadowRadius
ที่กำหนดโดยใช้ Renderscript APIshadowColor
/ shadowOpacity
และชดเชยตาม shadowOffset
วิธีการทำงานของ ninepatchDrawable (สังเกตว่ามุมไม่ถูกต้องเมื่อปรับขนาดได้):
React-Native-Fast-Shadow มาพร้อมกับข้อ จำกัด ต่อไปนี้:
<View>
<ShadowedView>
จะไม่ทำงานกับมุมมองแบบอิสระ มันคาดว่ามุมมองของลูกหลานโดยตรงของมันจะเป็นสี่เหลี่ยมผืนผ้าโค้งมน (ถึงวงกลม) โซลูชัน: สำหรับองค์ประกอบ <Text>
Shadowed คุณสามารถใช้ TextShadowRadius ได้ สำหรับรูปร่างที่ซับซ้อน React-Native-Androw เป็นตัวเลือกที่ดีที่สุดของคุณ<ShadowedView>
และลูก ๆ ของมันมีขนาดเท่ากันมิฉะนั้นเงาจะใหญ่กว่าเนื้อหา (คุณสามารถนึกถึง <ShadowedView>
เป็นมุมมอง ด้วยสีพื้นหลัง)<ShadowedView>
หรือรูปแบบของลูกโดยตรงเพื่ออนุมานรัศมีมุมเพื่อใช้ หากลำดับชั้นมุมมองของคุณมีความซับซ้อนมากขึ้นรัศมีมุมอาจไม่อนุมานได้อย่างถูกต้อง วิธีแก้ปัญหา: ทำใหม่ลำดับชั้นมุมมองของคุณหรือส่งผ่าน borderRadius
โดยตรงไปยังรูป style
ของ <ShadowedView>
ตารางต่อไปนี้เปรียบเทียบการใช้หน่วยความจำของ react-native-fast-shadow
------------------shadow-2 เมื่อแสดงผล 100 150x200pt <Image>
บนพิกเซล 2 พร้อมเงารัศมี 12pt แอพนี้ถูกสร้างขึ้นโดยใช้ตัวแปรดีบั๊กและเฮอร์มีส
ไม่มีเงา | React-Native-Shadow-2 | ตอบโต้ | React-Native-Fast-Shadow |
---|---|---|---|
117MB (อ้างอิง) | 430MB (+313MB) | 403MB (+286MB) | 123MB (+6MB) |