下圖看起來(lái)和使用Container做的線(xiàn)顯示效果一樣

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括鼎城網(wǎng)站建設(shè)、鼎城網(wǎng)站制作、鼎城網(wǎng)頁(yè)制作以及鼎城網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鼎城網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到鼎城省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
Flutter 官方對(duì)解釋的不是很清楚
通過(guò)測(cè)試對(duì)比發(fā)現(xiàn)Flutter在渲染小于1邏輯像素的線(xiàn)的時(shí)候,其高度是按1邏輯像素去展示的,只不過(guò)看到的顏色會(huì)不一樣,當(dāng)設(shè)置線(xiàn)的高度不是整數(shù)邏輯像素時(shí),線(xiàn)的高度是線(xiàn)上取整后的邏輯像素,只不過(guò)看到的線(xiàn)上下邊緣的顏色會(huì)隨著小數(shù)部分的值越大顏色越接近設(shè)置的顏色。也就是說(shuō)flutter是以1邏輯像素的整數(shù)倍去顯示的,如果是非整數(shù)倍邏輯像素線(xiàn)上下邊緣的顏色會(huì)跟設(shè)置的不一樣(以灰度的方式顯示出來(lái))。
ios 原生目前也可以展示小于1物理像素的點(diǎn),但是以UIView的控件做的線(xiàn),其高度有個(gè)臨界值,低于臨界值的線(xiàn)會(huì)顯示不出來(lái),而且其顯示的線(xiàn)邊緣比較銳利,其高度在到某一臨界值后會(huì)直接變高,而不是在線(xiàn)上下邊緣做灰度展示。而用原生繪制出來(lái)的線(xiàn)展示小于以邏輯像素的時(shí)候其高度均展示為1邏輯像素,不過(guò)顏色值會(huì)以灰度的方式展示出來(lái),在達(dá)到邏輯像素的整數(shù)倍時(shí)展示設(shè)置的顏色,這是和flutter一樣的。
比如拿iPhone 6s 舉例,其屏幕寬度是2.3英寸,橫向上有750顆像素點(diǎn),ppi = 750/2.3 = 326,既每寸上有326個(gè)物理像素,換算成厘米也就是 326/2.54 = 128.35,也就是說(shuō)每厘米上有128.35個(gè)物理像素點(diǎn),每毫米有13個(gè)物理像素點(diǎn),也就是每個(gè)物理像素點(diǎn)的寬度是0.077毫米。6s 的邏輯寬度是375,橫向上每厘米有375/(2.3*2.54) = 64邏輯像素/cm,也就是6s上每個(gè)邏輯像素的寬度是0.156毫米。當(dāng)我們?cè)O(shè)置一邏輯像素寬度時(shí)其在6s上對(duì)應(yīng)的寬度是0.156毫米。
Flutter中控件的高寬和字體大小時(shí),使用的是邏輯像素,并非是實(shí)際的物理像素。
flutter中的屏幕適配
假設(shè)設(shè)計(jì)圖的大小為1080 1920,上面一個(gè)圖片的高度為 80 90,則它在設(shè)備上的高寬為
對(duì)于android手機(jī),一般以寬度為基準(zhǔn)計(jì)算UI的高寬,因?yàn)閍ndroid手機(jī)的寬度一般就是750,1080等幾個(gè)尺寸,但是高的尺寸就有很多。
推薦一個(gè)別人封裝好的一個(gè)用于屏幕適配的庫(kù)
Flutter屏幕適配方案插件-完美解決屏幕適配
flutter開(kāi)發(fā)中,圖片的引用是必不可少的,所以為了提高效率和精準(zhǔn)度,我們需要對(duì)不同分辨率的手機(jī)使用相對(duì)應(yīng)的切圖圖片,本章介紹如何進(jìn)行 圖片分辨率適配 和 圖片批量拓展處理 。
flutter中會(huì)首先根據(jù)系統(tǒng)的devicePixelRatio(每一個(gè)邏輯像素包含多少個(gè)原始像素,可以通過(guò)MediaQueryData.devicePixelRatio來(lái)得到)來(lái)找對(duì)應(yīng)倍數(shù)的文件夾下的圖片,如果沒(méi)有對(duì)應(yīng)倍數(shù),找最接近的。
所以在flutter項(xiàng)目中,我們需要構(gòu)建對(duì)應(yīng)的倍數(shù)像素文件夾
之后再pubspec.yaml中,配置assets文件后就可以使用了(如使用"assets/images/jay.png",會(huì)自動(dòng)適配該像素下最接近的jay圖片)。
使用flutter-img-sync插件批量化處理,具體操作如下
目前還不能處理gif、webp等格式的圖片,而且如果和上邊介紹的不同像素比適配方案一起使用的話(huà),由于進(jìn)行了精準(zhǔn)定位,所以指定圖片后就不能進(jìn)行像素適配,這是目前還存在的較大問(wèn)題,所以目前兩者方案只能暫時(shí)取一使用。
做移動(dòng)端開(kāi)發(fā)的小伙伴都知道,針對(duì)不同型號(hào)和尺寸的手機(jī)要進(jìn)行頁(yè)面適配,且Android和iOS適配方案各不相同,那flutter端如何進(jìn)行適配呢?以下為近期flutter開(kāi)發(fā)過(guò)程中關(guān)于適配的一些學(xué)習(xí)和記錄~~~~
說(shuō)到flutter屏幕適配,就不得不提到插件 flutter_screenutil ,提到flutter_screenutil就不得不說(shuō)以下幾點(diǎn)????
默認(rèn)寬1080px
默認(rèn)高1920px
allowFontScaling為false,即不跟隨系統(tǒng)字體大小設(shè)置變化
初始化單位為px
需要把context傳進(jìn)去,因?yàn)閮?nèi)部是通過(guò) MediaQuery 來(lái)獲取屏幕尺寸等相關(guān)信息的
無(wú)需再傳context,因?yàn)閮?nèi)部是通過(guò)單例 window 來(lái)獲取屏幕尺寸等相關(guān)信息的
作為iOS開(kāi)發(fā),之前都是以pt為參照進(jìn)行比例適配的,且架構(gòu)組已經(jīng)定義了一套適配相關(guān)常量,傳px進(jìn)去不太方便,所以需要對(duì)flutter_screenutil進(jìn)行擴(kuò)展
公司設(shè)計(jì)圖是以iPhone X的尺寸提供的即物理設(shè)備尺寸為375x812,像素比例為750x1624,像素密度比為2
初始化仍用px來(lái)初始化
dart sdk 2.7正式支持 extension-method ,即為已有類(lèi)擴(kuò)展方法,從 flutter_screenutil 這種 540.w 寫(xiě)法點(diǎn)進(jìn)去,我們可以看到
flutter_screenutil為num類(lèi)擴(kuò)展了一系列簡(jiǎn)寫(xiě)方法,那我們當(dāng)然可以按照它這種方式進(jìn)行擴(kuò)展
網(wǎng)上提供的解決方案:
第一步:修改 pubspec.yaml
第二步:執(zhí)行 flutter pub get
第三步:重啟 AndroidStudio
解決方案:去掉const即可
UI設(shè)計(jì)中px、pt、ppi、dpi、dp、sp之間的關(guān)系
Dart/Flutter - 擴(kuò)展方法(ExtensionMethod)
本文標(biāo)題:flutter像素,簡(jiǎn)書(shū) flutter
轉(zhuǎn)載來(lái)源:http://chinadenli.net/article13/dsehcgs.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、微信公眾號(hào)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站制作、、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)