成都网站建设设计

将想法与焦点和您一起共享

flutter像素,简书 flutter

小于1像素的渲染探究

下图看起来和使用Container做的线显示效果一样

创新互联服务项目包括鼎城网站建设、鼎城网站制作、鼎城网页制作以及鼎城网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,鼎城网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到鼎城省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

Flutter 官方对解释的不是很清楚

通过测试对比发现Flutter在渲染小于1逻辑像素的线的时候,其高度是按1逻辑像素去展示的,只不过看到的颜色会不一样,当设置线的高度不是整数逻辑像素时,线的高度是线上取整后的逻辑像素,只不过看到的线上下边缘的颜色会随着小数部分的值越大颜色越接近设置的颜色。也就是说flutter是以1逻辑像素的整数倍去显示的,如果是非整数倍逻辑像素线上下边缘的颜色会跟设置的不一样(以灰度的方式显示出来)。

ios 原生目前也可以展示小于1物理像素的点,但是以UIView的控件做的线,其高度有个临界值,低于临界值的线会显示不出来,而且其显示的线边缘比较锐利,其高度在到某一临界值后会直接变高,而不是在线上下边缘做灰度展示。而用原生绘制出来的线展示小于以逻辑像素的时候其高度均展示为1逻辑像素,不过颜色值会以灰度的方式展示出来,在达到逻辑像素的整数倍时展示设置的颜色,这是和flutter一样的。

比如拿iPhone 6s 举例,其屏幕宽度是2.3英寸,横向上有750颗像素点,ppi = 750/2.3 = 326,既每寸上有326个物理像素,换算成厘米也就是 326/2.54 = 128.35,也就是说每厘米上有128.35个物理像素点,每毫米有13个物理像素点,也就是每个物理像素点的宽度是0.077毫米。6s 的逻辑宽度是375,横向上每厘米有375/(2.3*2.54) = 64逻辑像素/cm,也就是6s上每个逻辑像素的宽度是0.156毫米。当我们设置一逻辑像素宽度时其在6s上对应的宽度是0.156毫米。

Flutter MediaQuery获取屏幕信息以及屏幕适配

Flutter中控件的高宽和字体大小时,使用的是逻辑像素,并非是实际的物理像素。

flutter中的屏幕适配

假设设计图的大小为1080 1920,上面一个图片的高度为 80 90,则它在设备上的高宽为

对于android手机,一般以宽度为基准计算UI的高宽,因为android手机的宽度一般就是750,1080等几个尺寸,但是高的尺寸就有很多。

推荐一个别人封装好的一个用于屏幕适配的库

Flutter屏幕适配方案插件-完美解决屏幕适配

Flutter_图片分辨率适配及批量拓展使用

flutter开发中,图片的引用是必不可少的,所以为了提高效率和精准度,我们需要对不同分辨率的手机使用相对应的切图图片,本章介绍如何进行 图片分辨率适配 和 图片批量拓展处理 。

flutter中会首先根据系统的devicePixelRatio(每一个逻辑像素包含多少个原始像素,可以通过MediaQueryData.devicePixelRatio来得到)来找对应倍数的文件夹下的图片,如果没有对应倍数,找最接近的。

所以在flutter项目中,我们需要构建对应的倍数像素文件夹

之后再pubspec.yaml中,配置assets文件后就可以使用了(如使用"assets/images/jay.png",会自动适配该像素下最接近的jay图片)。

使用flutter-img-sync插件批量化处理,具体操作如下

目前还不能处理gif、webp等格式的图片,而且如果和上边介绍的不同像素比适配方案一起使用的话,由于进行了精准定位,所以指定图片后就不能进行像素适配,这是目前还存在的较大问题,所以目前两者方案只能暂时取一使用。

Flutter实践--屏幕适配

做移动端开发的小伙伴都知道,针对不同型号和尺寸的手机要进行页面适配,且Android和iOS适配方案各不相同,那flutter端如何进行适配呢?以下为近期flutter开发过程中关于适配的一些学习和记录~~~~

说到flutter屏幕适配,就不得不提到插件 flutter_screenutil ,提到flutter_screenutil就不得不说以下几点????

默认宽1080px

默认高1920px

allowFontScaling为false,即不跟随系统字体大小设置变化

初始化单位为px

需要把context传进去,因为内部是通过 MediaQuery 来获取屏幕尺寸等相关信息的

无需再传context,因为内部是通过单例 window 来获取屏幕尺寸等相关信息的

作为iOS开发,之前都是以pt为参照进行比例适配的,且架构组已经定义了一套适配相关常量,传px进去不太方便,所以需要对flutter_screenutil进行扩展

公司设计图是以iPhone X的尺寸提供的即物理设备尺寸为375x812,像素比例为750x1624,像素密度比为2

初始化仍用px来初始化

dart sdk 2.7正式支持 extension-method ,即为已有类扩展方法,从 flutter_screenutil 这种 540.w 写法点进去,我们可以看到

flutter_screenutil为num类扩展了一系列简写方法,那我们当然可以按照它这种方式进行扩展

网上提供的解决方案:

第一步:修改 pubspec.yaml

第二步:执行 flutter pub get

第三步:重启 AndroidStudio

解决方案:去掉const即可

UI设计中px、pt、ppi、dpi、dp、sp之间的关系

Dart/Flutter - 扩展方法(ExtensionMethod)


当前文章:flutter像素,简书 flutter
分享URL:http://chengdu.cdxwcx.cn/article/dsehcgs.html