發(fā)布時間:2024-08-22 20:43:46 瀏覽量:166次
在React Native中,UI和Android XML布局的編寫方式有很多相似之處。
React Native框架中,通過Bridge實現(xiàn)了JSX源碼和原生框架的通信。當(dāng)調(diào)用React Native提供的API時,React Native框架會通過Bridge調(diào)用原生框架的方法。
React Native底層為React框架,通過虛擬DOM和diff算法,實現(xiàn)了只需控制state和props變更即可實現(xiàn)iOS和Android平臺的UI變更,同時生成main.bundle.js文件供App加載。
在React Native中使用了Yoga這個基于C語言實現(xiàn)的CSS3/Flexbox布局引擎,讓界面布局更加簡單,且適用于多平臺。
推薦閱讀:點擊咨詢
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:點擊咨詢
為了給React-Native組件加上樣式,你需要在JavaScript中添加樣式表。
const styles = StyleSheet.create({ blueText: { color: 'blue', fontSize: 30, }});
StyleSheet.create可以彌補編寫復(fù)雜樣式時,不能使用css的不便。
RN中寬高可以直接通過style指定,與web不同的是,RN中尺寸是無單位的,表示與設(shè)備像素?zé)o關(guān)的邏輯像素點。推薦閱讀《Android XML與HTML5 排布布局分析與對比—style的異同》。
React Native提供了兩個互補的動畫系統(tǒng):用于創(chuàng)建精細的交互控制的動畫Animated和用于全局的布局動畫LayoutAnimation。
Animated旨在以聲明的形式來定義動畫的輸入與輸出,在其中建立一個可配置的變化函數(shù),然后使用start/stop方法來控制動畫按順序執(zhí)行。 Animated僅封裝了 6 個可以動畫化的組件:View、Text、Image、ScrollView、FlatList和SectionList,不過你也可以使用Animated.createAnimatedComponent()來封裝你自己的組件。
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 )}
這一過程經(jīng)過特別優(yōu)化,執(zhí)行效率會遠高于反復(fù)調(diào)用setState和多次重渲染。
因為這一過程是純聲明式的,因此還有進一步優(yōu)化的空間,比如我們可以把這些聲明的配置序列化后發(fā)送到一個高優(yōu)先級的線程上運行。
動畫擁有非常靈活的配置項。自定義的或預(yù)定義的 easing 函數(shù)、延遲、持續(xù)時間、衰減系數(shù)、彈性常數(shù)等都可以在對應(yīng)類型的動畫中進行配置。
Animated.timing(this.state.animatedValue, { toValue: 1, easing: Easing.back(), duration: 2000}).start();
詳細配置動畫信息請參考:點擊咨詢
多個動畫可以通過parallel(同時執(zhí)行)、sequence(順序執(zhí)行)、stagger和delay來組合使用。它們中的每一個都接受一個要執(zhí)行的動畫數(shù)組,并且自動在適當(dāng)?shù)臅r候調(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 }) ])])
默認情況下,如果任何一個動畫被停止或中斷了,組內(nèi)所有其它的動畫也會被停止。Parallel 有一個stopTogether屬性,如果設(shè)置為false,可以禁用自動停止。
在Animated文檔的組合動畫一節(jié)中列出了所有的組合方法。
const a = new Animated.Value(1);const b = Animated.divide(1, a);Animated.spring(a, { toValue: 2}).start();
可以使用加減乘除以及取余等運算來把兩個動畫值合成為一個新的動畫值。
每個動畫屬性都可以設(shè)置值變化區(qū)間
style={{ opacity: this.state.fadeAnim, transform: [{ translateY: this.state.fadeAnim.interpolate({ inputRange: [-300, -100, 0, 100, 101], outputRange: [150, 0] }), }], }}
interpolate()還支持定義多個區(qū)間段落,常用來定義靜止區(qū)間等。
Animated.spring(follower, { toValue: leader }).start();Animated.timing(opacity, { toValue: pan.x.interpolate({ inputRange: [0, 300], outputRange: [1, 0] })}).start();
比如在上面
熱門資訊
1. iPhone6的UI設(shè)計尺寸規(guī)范,原來如此重要!
想要了解iPhone6界面設(shè)計的尺寸規(guī)范嗎?這里為您詳細介紹iPhone6的UI設(shè)計尺寸規(guī)范,包括界面尺寸、圖標尺寸、可點擊高度規(guī)范、搜索欄高度規(guī)范以及界面元素之間的距離規(guī)范。
2. 12個絕佳的UI設(shè)計網(wǎng)站,助力你的創(chuàng)作之旅!
將為大家介紹12個絕佳的UI設(shè)計網(wǎng)站,這些網(wǎng)站不僅可以為你提供靈感,還可以幫助你學(xué)習(xí)新的技巧,助力你的創(chuàng)意之旅!dribbbleDribbble 是一個面向設(shè)計師的...
3. 移動端UI設(shè)計中常見的5種APP界面類型,你get到了嗎?
通過介紹移動端UI設(shè)計中的閃屏頁、引導(dǎo)頁、浮層引導(dǎo)頁、空白頁和首頁等5種APP界面類型,幫助大家更好地了解UI設(shè)計的基本知識
4. 移動端列表頁和表單頁設(shè)計秘訣:讓你的APP點擊率翻倍
在移動端設(shè)計中,列表頁和表單頁是不可或缺的部分。一個好的列表頁和表單頁設(shè)計能夠讓用戶輕松地獲取信息并產(chǎn)生點擊欲望,從而提高點擊率。本文將為你...
5. 10個免費學(xué)習(xí)UI設(shè)計的網(wǎng)站 提升你的設(shè)計能力
怎樣可以提升你的UI設(shè)計能力!第一個:站酷站酷想必是設(shè)計師都知道的一個網(wǎng)站,里面不止有UI設(shè)計的資源,還有其他設(shè)計的,不如:平面設(shè)計、網(wǎng)頁設(shè)計、字體...
6. 推薦10本適合UI設(shè)計師看的書籍,輕松掌握技能!
對于想要提高自己的設(shè)計能力和創(chuàng)造力的小白和UI設(shè)計師來說,這本書是一個很好的選擇。4.《設(shè)計的覺醒》(IKKO TANAKA)推薦理由: 這本書是日本現(xiàn)代平面...
7. 零基礎(chǔ)學(xué)UI設(shè)計要多久?培訓(xùn)完能拿多少工資?
探索零基礎(chǔ)UI設(shè)計培訓(xùn)的時長與薪資前景。了解數(shù)字藝術(shù)教育領(lǐng)域的專業(yè)課程,以及培訓(xùn)后的職業(yè)發(fā)展機會。
8. 物聯(lián)網(wǎng)APP UI設(shè)計:創(chuàng)造智能硬件領(lǐng)域的沉浸式體驗
ui設(shè)計應(yīng)該讓用戶一目了然,能夠快速找到所需的信息和功能。在設(shè)計過程中,應(yīng)盡量使用簡潔的圖標、文字和色彩,避免過多的視覺干擾。符合用戶習(xí)慣:ui設(shè)...
9. 設(shè)計中的色彩心理學(xué):淺析中西方色彩的歷史演變與設(shè)計應(yīng)用
摘要:本文探討了色彩的歷史演變和設(shè)計應(yīng)用。通過對色彩在早期文明社會中的實用運用、不同文化背景下色彩觀念的差異、色彩在設(shè)計中的重要性以及新興技...
大家今天走運了,我就把自己總結(jié)出來的學(xué)習(xí)UI設(shè)計的一些經(jīng)驗與大家一起分享吧。想做一個好的UI設(shè)計師除了應(yīng)該具有一定的審美能力,還要了解整個產(chǎn)品的...
最新文章
同學(xué)您好!