發(fā)布時(shí)間:2024-01-04 15:03:05 瀏覽量:244次
一、源起
??作者是名超大齡程序員,曾涉及了包括Web端、桌面端、移動(dòng)端等各類前端技術(shù),深受這些前端技術(shù)的苦,主要但不限于:
1. 每種技術(shù)編寫(xiě)代碼的語(yǔ)言及技術(shù)完全不同,同樣呈現(xiàn)形式的組件各端無(wú)法通用;
2. 大部分前端開(kāi)發(fā)語(yǔ)言跟后端開(kāi)發(fā)語(yǔ)言不同,不能共用一些數(shù)據(jù)結(jié)構(gòu);
??前端UI的本質(zhì)是在顯示器上呈現(xiàn)由像素點(diǎn)組成的畫(huà)面,并且響應(yīng)外部輸入事件作出相應(yīng)的重繪。由于作者對(duì)Skia2D繪圖引擎比較熟悉,又恰好可以借鑒一下Flutter引擎的跨端實(shí)現(xiàn),所以作者動(dòng)起了重新造一個(gè)跨端UI的念頭。 阿基米德說(shuō)過(guò):“給我一個(gè)支點(diǎn),我可以撬動(dòng)地球”,那作者要說(shuō):"給我一塊畫(huà)布,我可以造一個(gè)全新的跨端UI"。
二、畫(huà)布及畫(huà)筆:
??有了畫(huà)布才能繪制用戶界面,目前畫(huà)布的來(lái)源主要是兩類:
1. Web端參考Flutter的實(shí)現(xiàn),利用編譯為WebAssembly的CanvasKit提供;
2. 桌面端及移動(dòng)端參考Xamarin的實(shí)現(xiàn),利用原生操作系統(tǒng)的視窗結(jié)合Skia的SkCanvas提供;
??每個(gè)窗體的畫(huà)布分為兩層,一層繪制Widget,另一層用于彈出層的繪制及一些組件裝飾器的繪制。繪制引擎暫統(tǒng)一由Skia來(lái)處理,將來(lái)可能會(huì)考慮抽象繪制引擎。
三、組件樹(shù)、布局及樣式
??Flutter有三棵樹(shù),作者嫌啰嗦所以只有一棵WidgetTree,好處是實(shí)現(xiàn)簡(jiǎn)單且方便維持組件實(shí)例的狀態(tài)。每個(gè)界面都由組件樹(shù)結(jié)構(gòu)組成。有些組件為布局類的(eg: Column、Stack等),具備單或多子組件;有些組件為葉子節(jié)點(diǎn)(eg: Text、PieChart等),通過(guò)設(shè)置相應(yīng)的屬性后直接繪制至畫(huà)布。
四、組件狀態(tài)
??實(shí)現(xiàn)組件時(shí)如果需要外部狀態(tài)驅(qū)動(dòng),可以定義狀態(tài)變量并綁定至組件的相關(guān)屬性,這樣當(dāng)狀態(tài)值發(fā)生變更時(shí),綁定的組件根據(jù)狀態(tài)影響進(jìn)行重新布局或僅重新繪制。
public class DemoCounter : View
{
private readonly State<int> _counter = 0; //定義狀態(tài)
public DemoCounter()
{
Child = new Column
{
Children = new Widget[]
{
new Text(_counter.AsStateOfString()/*綁定至組件*/),
new Button("+") { OnTap = e => _counter.Value+=1/*改變狀態(tài)值*/ }
}
};
}
}
五、組件動(dòng)畫(huà)
??動(dòng)畫(huà)實(shí)現(xiàn)基本照搬Flutter的實(shí)現(xiàn)方式,由AnimationController在指定時(shí)間段內(nèi)驅(qū)動(dòng)各Animation的動(dòng)畫(huà)值變化,從而連續(xù)改變組件的狀態(tài)值。
public class DemoAnimation : View
{
private readonly AnimationController _controller;
private readonly Animation<Offset> _offsetAnimation;
public DemoAnimation()
{
_controller = new AnimationController(1000/*動(dòng)畫(huà)時(shí)長(zhǎng)*/);
_offsetAnimation = new OffsetTween(new Offset(-1, 0), new Offset(1, 0))
.Animate(_controller); //位移變換并綁定至動(dòng)畫(huà)控制器
Child = new Column
{
Children = new Widget[]
{
new Button("播放動(dòng)畫(huà)") { OnTap = e => _controller.Forward() },
new SlideTransition(_offsetAnimation)
{
Child = new Text("動(dòng)畫(huà)")
}
}
};
}
}
六、后續(xù)
??力量有限,在此拋磚引玉希望更多感興趣的伙伴加入完善,也希望成為跟華為ArkUI類似的國(guó)產(chǎn)UI,對(duì)了暫時(shí)就叫PixUI吧。
熱門(mén)資訊
1. iPhone6的UI設(shè)計(jì)尺寸規(guī)范,原來(lái)如此重要!
想要了解iPhone6界面設(shè)計(jì)的尺寸規(guī)范嗎?這里為您詳細(xì)介紹iPhone6的UI設(shè)計(jì)尺寸規(guī)范,包括界面尺寸、圖標(biāo)尺寸、可點(diǎn)擊高度規(guī)范、搜索欄高度規(guī)范以及界面元素之間的距離規(guī)范。
2. 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ì)師的...
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. 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ì)、字體...
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. 推薦10本適合UI設(shè)計(jì)師看的書(shū)籍,輕松掌握技能!
對(duì)于想要提高自己的設(shè)計(jì)能力和創(chuàng)造力的小白和UI設(shè)計(jì)師來(lái)說(shuō),這本書(shū)是一個(gè)很好的選擇。4.《設(shè)計(jì)的覺(jué)醒》(IKKO TANAKA)推薦理由: 這本書(shū)是日本現(xiàn)代平面...
7. 零基礎(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ì)。
8. 物聯(lián)網(wǎng)APP UI設(shè)計(jì):創(chuàng)造智能硬件領(lǐng)域的沉浸式體驗(yàn)
ui設(shè)計(jì)應(yīng)該讓用戶一目了然,能夠快速找到所需的信息和功能。在設(shè)計(jì)過(guò)程中,應(yīng)盡量使用簡(jiǎn)潔的圖標(biāo)、文字和色彩,避免過(guò)多的視覺(jué)干擾。符合用戶習(xí)慣:ui設(shè)...
9. 武漢UI設(shè)計(jì)培訓(xùn)班費(fèi)用怎么樣?想學(xué)UI設(shè)計(jì)要多少錢(qián)?
想了解武漢UI設(shè)計(jì)培訓(xùn)班的費(fèi)用是多少嗎?不知道學(xué)UI設(shè)計(jì)要花多少錢(qián)?不妨看看這篇文章,了解UI設(shè)計(jì)培訓(xùn)班的學(xué)費(fèi)價(jià)格以及學(xué)習(xí)內(nèi)容。
10. 設(shè)計(jì)中的色彩心理學(xué):淺析中西方色彩的歷史演變與設(shè)計(jì)應(yīng)用
摘要:本文探討了色彩的歷史演變和設(shè)計(jì)應(yīng)用。通過(guò)對(duì)色彩在早期文明社會(huì)中的實(shí)用運(yùn)用、不同文化背景下色彩觀念的差異、色彩在設(shè)計(jì)中的重要性以及新興技...
最新文章
同學(xué)您好!