热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

关于像素?

我们说的分辨率,比如iphone4的分辨率是960*640—这个是单位是点,标识设备屏幕上有多少显示单元,每个显示单元,可以

我们说的分辨率,

比如

  1. iphone4的分辨率是 960 * 640 —这个是单位是点,标识设备屏幕上有多少显示单元,每个显示单元,可以理解一个个物理的发光二极管
  2. iphone4的尺寸是3.5in,说的是物理的尺寸,对角线的长度,对应我们常说的物理单位,cm,m这种。
  3. 思考一下,是不是我的分辨率越高,就显示的越清晰?

NO, 分辨率高未必清晰,我都见过那种很大led广告屏,分辨率高啊,几千几万,但是仍然能看到明显的颗粒度。

在仔细一想,其实清晰不清晰,主要看的是单位密度(ppi)而不是设备总像素的多少。是不是单位密度越高,显示的细节越清晰啊。

  1. 有没有发现,所有的这些都是和具体的设备挂钩的。谈像素谈尺寸,都是离不开具体的设备。

但是有个问题,为啥又引入dp的概念,独立设备像素呢。

物理像素对应设备像素不是挺好?

好吗?

对于开发人员来说,设备千千万。分辨率千差万别。

你想一下,如果同样3.5寸的屏幕上,我有个列表

宽度都是100%,高度我设置 20

你会发现,分辨率高的屏幕上,高度特别小,宽度特别长。反倒是
分辨率高的显示的不清晰(跟蚂蚁一样,密度太高,物理上看起来就小的很)

这可咋整啊。

设备厂商也郁闷了,草尼玛,老子辛辛苦苦提高分辨率,出力不讨好啊。

有啥办法,看起来物理上的高度和宽度都一致,但是更清晰的。

有没有什么办法解决啊!

于是大家一合计,你是ppi高吗?那我定义一个单位,

这就引出的独立设备像素,顾名思义,就是独立于设备的像素。

我就定义一个逻辑单位,dp

dp有多大呢,dp就有小指头的上方的一小块这么大(笑笑)。

你们呢都,尽量往上靠,高的你就在设备层面转化物理像素的时候,放大一下。
低的呢,你就缩小一点。

这样看起来,大家是不是差不多大了。

对于开发人员来说,只要设置的两个屏幕逻辑像素相同,它们的显示效果就是相同的。
是不是很爽。

大家一总结,发现把设备按照ppi分一下,大概是这么个比例:

ldpi [0.75倍]

mdpi [1倍]

hdpi [1.5倍]

xhdpi [2倍]

xxhdpi [3倍]

xxxhdpi [4倍]

不难发现,真正决定显示效果的,是逻辑像素尺寸(独立设备像素)。

有人问了,我一个前端懂这些有卵子用。

移动端页面的绝对单位就是px啊,我设置dp也不支持啊(草!!!为啥不支持dp?)

px和dp有啥关系?你想啊,浏览器也是设备上的应用,也是按照设备的缩放比缩放的。
具体可以对照一下, 缩放比:

1dp=1px(mdpi、iPhone 3gs)

1dp=1.5px(hdpi)

1dp=2px(xhdpi、iPhone 4s/5/6)

1dp=3px(xxhdpi、iPhone 6)

1dp=4px(xxxhdpi)

你再想想,不支持dp也行啊,你不是不支持吗?

老子自己造,自己的轮船自己造(哈哈!笑)

既然我都知道缩放比了,老子自己换算一下不就ok了。

嗯,对了,就你最聪明!!

哈哈,所以就有了rem的解决方案。


ps: 如何和设计沟通?

单位决定了我们的思考方式。

在设计和开发过程中,应该尽量使用逻辑像素尺寸来思考界面。

设计Android应用时,有的设计师喜欢把画布设为1080×1920,有的喜欢设成720×1280。

给出的界面元素尺寸就不统一了。

Android的最小点击区域尺寸是48x48dp,这就意味着在xhdpi的设备上,按钮尺寸至少是96x96px。

而在xxhdpi设备上,则是144x144px。

无论画布设成多大,我们设计的是基准倍率的界面样式,而且开发人员需要的单位都是逻辑像素

所以为了保证准确高效的沟通,双方要以逻辑像素尺寸来描述和理解界面。



推荐阅读
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文详细介绍了如何在 Android 应用中获取系统的版本号,包括具体的应用场景和实现步骤。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 解决Win10下MySQL连接问题:Navicat 2003无法连接到本地MySQL服务器(10061)
    本文介绍如何在Windows 10环境下解决Navicat 2003无法连接到本地MySQL服务器的问题,包括启动MySQL服务和检查配置文件的方法。 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
author-avatar
viper-zhu_890_552
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有