發(fā)布時(shí)間:2024-08-22 20:43:46 瀏覽量:184次
在React Native中,UI和Android XML布局的編寫方式有很多相似之處。
React Native框架中,通過(guò)Bridge實(shí)現(xiàn)了JSX源碼和原生框架的通信。當(dāng)調(diào)用React Native提供的API時(shí),React Native框架會(huì)通過(guò)Bridge調(diào)用原生框架的方法。
React Native底層為React框架,通過(guò)虛擬DOM和diff算法,實(shí)現(xiàn)了只需控制state和props變更即可實(shí)現(xiàn)iOS和Android平臺(tái)的UI變更,同時(shí)生成main.bundle.js文件供App加載。
在React Native中使用了Yoga這個(gè)基于C語(yǔ)言實(shí)現(xiàn)的CSS3/Flexbox布局引擎,讓界面布局更加簡(jiǎn)單,且適用于多平臺(tái)。
推薦閱讀:點(diǎn)擊咨詢
| React Native | Android View | iOS View | Web Analog | Description |
|---|---|---|---|---|
| <View> | <ViewGroup> | <UIView> | <div> | A container that supports layout with flexbox, style, some touch handling, and accessibility controls |
| <Text> | <TextView> | <UITextView> | <p> | Displays, styles, and nests strings of text and even handles touch events |
| <Image> | <ImageView> | <UIImageView> | <img> | Displays different types of images |
| <ScrollView> | <ScrollView> | <UIScrollView> | <div> | A generic scrolling container that can contain multiple components and views |
| <TextInput> | <EditText> | <UITextField> | <input type="text"> | Allows the user to enter text |
核心組件和API:點(diǎn)擊咨詢
為了給React-Native組件加上樣式,你需要在JavaScript中添加樣式表。
const styles = StyleSheet.create({ blueText: { color: 'blue', fontSize: 30, }});
StyleSheet.create可以彌補(bǔ)編寫復(fù)雜樣式時(shí),不能使用css的不便。
RN中寬高可以直接通過(guò)style指定,與web不同的是,RN中尺寸是無(wú)單位的,表示與設(shè)備像素?zé)o關(guān)的邏輯像素點(diǎn)。推薦閱讀《Android XML與HTML5 排布布局分析與對(duì)比—style的異同》。
React Native提供了兩個(gè)互補(bǔ)的動(dòng)畫系統(tǒng):用于創(chuàng)建精細(xì)的交互控制的動(dòng)畫Animated和用于全局的布局動(dòng)畫LayoutAnimation。
Animated旨在以聲明的形式來(lái)定義動(dòng)畫的輸入與輸出,在其中建立一個(gè)可配置的變化函數(shù),然后使用start/stop方法來(lái)控制動(dòng)畫按順序執(zhí)行。 Animated僅封裝了 6 個(gè)可以動(dòng)畫化的組件:View、Text、Image、ScrollView、FlatList和SectionList,不過(guò)你也可以使用Animated.createAnimatedComponent()來(lái)封裝你自己的組件。
import React, { useRef, useEffect } from 'react';import { Animated, Text, View } from 'react-native';const FadeInView = (props) => { const fadeAnim = useRef(new Animated.Value(0)).current; React.useEffect(() => { Animated.timing( fadeAnim, { toValue: 1, duration: 10000, } ).start(); }, [fadeAnim]) return ( {props.children} );}export default () => { return ( Fading in )}
這一過(guò)程經(jīng)過(guò)特別優(yōu)化,執(zhí)行效率會(huì)遠(yuǎn)高于反復(fù)調(diào)用setState和多次重渲染。
因?yàn)檫@一過(guò)程是純聲明式的,因此還有進(jìn)一步優(yōu)化的空間,比如我們可以把這些聲明的配置序列化后發(fā)送到一個(gè)高優(yōu)先級(jí)的線程上運(yùn)行。
動(dòng)畫擁有非常靈活的配置項(xiàng)。自定義的或預(yù)定義的 easing 函數(shù)、延遲、持續(xù)時(shí)間、衰減系數(shù)、彈性常數(shù)等都可以在對(duì)應(yīng)類型的動(dòng)畫中進(jìn)行配置。
Animated.timing(this.state.animatedValue, { toValue: 1, easing: Easing.back(), duration: 2000}).start();
詳細(xì)配置動(dòng)畫信息請(qǐng)參考:點(diǎn)擊咨詢
多個(gè)動(dòng)畫可以通過(guò)parallel(同時(shí)執(zhí)行)、sequence(順序執(zhí)行)、stagger和delay來(lái)組合使用。它們中的每一個(gè)都接受一個(gè)要執(zhí)行的動(dòng)畫數(shù)組,并且自動(dòng)在適當(dāng)?shù)臅r(shí)候調(diào)用start/stop。
Animated.sequence([ // decay, then spring to start and twirl Animated.decay(position, { velocity: { x: gestureState.vx, y: gestureState.vy }, deceleration: 0.997 }), Animated.parallel([ // after decay, in parallel: Animated.spring(position, { toValue: { x: 0, y: 0 } }), Animated.timing(twirl, { toValue: 360 }) ])])
默認(rèn)情況下,如果任何一個(gè)動(dòng)畫被停止或中斷了,組內(nèi)所有其它的動(dòng)畫也會(huì)被停止。Parallel 有一個(gè)stopTogether屬性,如果設(shè)置為false,可以禁用自動(dòng)停止。
在Animated文檔的組合動(dòng)畫一節(jié)中列出了所有的組合方法。
const a = new Animated.Value(1);const b = Animated.divide(1, a);Animated.spring(a, { toValue: 2}).start();
可以使用加減乘除以及取余等運(yùn)算來(lái)把兩個(gè)動(dòng)畫值合成為一個(gè)新的動(dòng)畫值。
每個(gè)動(dòng)畫屬性都可以設(shè)置值變化區(qū)間
style={{ opacity: this.state.fadeAnim, transform: [{ translateY: this.state.fadeAnim.interpolate({ inputRange: [-300, -100, 0, 100, 101], outputRange: [150, 0] }), }], }}
interpolate()還支持定義多個(gè)區(qū)間段落,常用來(lái)定義靜止區(qū)間等。
Animated.spring(follower, { toValue: leader }).start();Animated.timing(opacity, { toValue: pan.x.interpolate({ inputRange: [0, 300], outputRange: [1, 0] })}).start();
比如在上面
熱門資訊
1. 10個(gè)免費(fèi)學(xué)習(xí)UI設(shè)計(jì)的網(wǎng)站 提升你的設(shè)計(jì)能力
怎樣可以提升你的UI設(shè)計(jì)能力!第一個(gè):站酷站酷想必是設(shè)計(jì)師都知道的一個(gè)網(wǎng)站,里面不止有UI設(shè)計(jì)的資源,還有其他設(shè)計(jì)的,不如:平面設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、字體...
2. iPhone6的UI設(shè)計(jì)尺寸規(guī)范,原來(lái)如此重要!
想要了解iPhone6界面設(shè)計(jì)的尺寸規(guī)范嗎?這里為您詳細(xì)介紹iPhone6的UI設(shè)計(jì)尺寸規(guī)范,包括界面尺寸、圖標(biāo)尺寸、可點(diǎn)擊高度規(guī)范、搜索欄高度規(guī)范以及界面元素之間的距離規(guī)范。
3. 移動(dòng)端UI設(shè)計(jì)中常見(jiàn)的5種APP界面類型,你get到了嗎?
通過(guò)介紹移動(dòng)端UI設(shè)計(jì)中的閃屏頁(yè)、引導(dǎo)頁(yè)、浮層引導(dǎo)頁(yè)、空白頁(yè)和首頁(yè)等5種APP界面類型,幫助大家更好地了解UI設(shè)計(jì)的基本知識(shí)
4. 12個(gè)絕佳的UI設(shè)計(jì)網(wǎng)站,助力你的創(chuàng)作之旅!
將為大家介紹12個(gè)絕佳的UI設(shè)計(jì)網(wǎng)站,這些網(wǎng)站不僅可以為你提供靈感,還可以幫助你學(xué)習(xí)新的技巧,助力你的創(chuàng)意之旅!dribbbleDribbble 是一個(gè)面向設(shè)計(jì)師的...
5. 移動(dòng)端列表頁(yè)和表單頁(yè)設(shè)計(jì)秘訣:讓你的APP點(diǎn)擊率翻倍
在移動(dòng)端設(shè)計(jì)中,列表頁(yè)和表單頁(yè)是不可或缺的部分。一個(gè)好的列表頁(yè)和表單頁(yè)設(shè)計(jì)能夠讓用戶輕松地獲取信息并產(chǎn)生點(diǎn)擊欲望,從而提高點(diǎn)擊率。本文將為你...
6. 史上最全,平面設(shè)計(jì)UI設(shè)計(jì)必備的77個(gè)國(guó)內(nèi)外素材、設(shè)計(jì)資源網(wǎng)站
ui設(shè)計(jì)社區(qū),大神太多了。3、behance: https://www.behance.net/ ,著名設(shè)計(jì)... 對(duì)于品牌設(shè)計(jì)師來(lái)說(shuō),除了圖案素材收集之外,還有一個(gè)很重要的,就是設(shè)計(jì)故...
7. 推薦10本適合UI設(shè)計(jì)師看的書籍,輕松掌握技能!
對(duì)于想要提高自己的設(shè)計(jì)能力和創(chuàng)造力的小白和UI設(shè)計(jì)師來(lái)說(shuō),這本書是一個(gè)很好的選擇。4.《設(shè)計(jì)的覺(jué)醒》(IKKO TANAKA)推薦理由: 這本書是日本現(xiàn)代平面...
8. 設(shè)計(jì)中的色彩心理學(xué):淺析中西方色彩的歷史演變與設(shè)計(jì)應(yīng)用
摘要:本文探討了色彩的歷史演變和設(shè)計(jì)應(yīng)用。通過(guò)對(duì)色彩在早期文明社會(huì)中的實(shí)用運(yùn)用、不同文化背景下色彩觀念的差異、色彩在設(shè)計(jì)中的重要性以及新興技...
9. 武漢UI設(shè)計(jì)培訓(xùn)班費(fèi)用怎么樣?想學(xué)UI設(shè)計(jì)要多少錢?
想了解武漢UI設(shè)計(jì)培訓(xùn)班的費(fèi)用是多少嗎?不知道學(xué)UI設(shè)計(jì)要花多少錢?不妨看看這篇文章,了解UI設(shè)計(jì)培訓(xùn)班的學(xué)費(fèi)價(jià)格以及學(xué)習(xí)內(nèi)容。
10. 零基礎(chǔ)學(xué)UI設(shè)計(jì)要多久?培訓(xùn)完能拿多少工資?
探索零基礎(chǔ)UI設(shè)計(jì)培訓(xùn)的時(shí)長(zhǎng)與薪資前景。了解數(shù)字藝術(shù)教育領(lǐng)域的專業(yè)課程,以及培訓(xùn)后的職業(yè)發(fā)展機(jī)會(huì)。
最新文章
同學(xué)您好!