当前位置:网站首页>21天学习挑战赛--第一天打卡(屏幕密度)
21天学习挑战赛--第一天打卡(屏幕密度)
2022-08-02 10:25:00 【孟芳芳】
1.回想
从事安卓开发几年,现在回想一下,从刚入行时会展示几个简单的控件就开心不已,到后来接触Android的四大组件,再到自定义View,最后到使用第三方开源框架做几个自认为酷炫的功能……然后好像就止步不前了,中间好几年都是凭借着这点初级的东西在“浪费生命”……
直到前两年意识到不能再这样下去,如果对于日新月异的技术只是知其然,而不知其所以然,那很快就会被淘汰,于是开始研究源码。一研究源码,发现自己好像又啥也不会了,又处于了刚入行的迷茫中……
趁着21天学习挑战的机会,逼自己一把,跟着大神狠狠学21天!
打卡第一天:像素密度、屏幕密度、分辨率。
2.背景:
为了适配不同屏幕大小,Android开发过程中,需要在资源文件中添加ldpi、mdpi、nodpi、xhdpi、xxhdpi、xxxhdpi多张图片。
3.几个概念
①屏幕大小
屏幕大小指的是手机对角线的物理尺寸,以英寸(inch)为单位,一英寸大约2.54厘米。
一般手机尺寸有4英寸、4.5英寸、5.0英寸、5.2英寸、5.4英寸、5.99英寸、6.0英寸、6.2英寸等。
②屏幕分辨率
分辨率是手机屏幕的像素点总数,一般用屏幕宽的像素点数乘以屏幕高的像素点数。分辨率越大屏幕越细腻,能够显示的细节就越多。
常用的分辨率有320x240、640x480、1280x720、1280x960、1080x1920、2560x1440等,单位是像素。比如1080x1920表示屏幕宽度方向上有1080个像素,屏幕高方向上有1920个像素。
获取屏幕分辨率:
int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕宽
int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高
③像素密度
像素密度(dpi,dots per inch;或PPI,pixels per inch)指每英寸上的像素点数。
④屏幕密度:
屏幕密度其实是像素密度的另外一种表示,是以160dpi=1.0为基准的。手机出厂之后屏幕密度,包括X,Y轴方向的像素密度都是固定值。
android以像素密度160dpi为基准对屏幕进行划分,当像素密度为160dpi时屏幕密度为1.0,像素密度为120dpi时屏幕密度为0.75,像素密度为320dpi时屏幕密度为2.0。
android将实际的屏幕密度划分为low、medium、high、and extra high、extra extra high。
一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi ,xxhdpi 是480dpi。
获取像素密度和屏幕密度:
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 像素密度(每寸像素:120/160/240/320)
float xdpi = dm.xdpi; //X轴方向的像素密度
float ydpi = dm.ydpi; //Y轴方向的像素密度
screenWidth = dm.widthPixels; // 屏幕宽
screenHeight = dm.heightPixels; // 屏幕高
4.多个drawable如何加载
android系统适配drawable时,会首先在与设备对应的dpi目录下查找。如果没有找,则会遵循“先高再低”原则,然后按比例缩放图片。
比如当前为xhdpi设备(项目中只有xxhdpi,xhdpi,xxhdpi,nodpi,mdpi,hdpi),则drawable的寻找顺序为:首先查找xhdpi目录,如果没找到就会查找xxhdpi,如果还没有找到就查找xxxhdpi,还没有找到就查找nodpi,如果还没有找到就查找hdpi,再找不到就查找mdpi,依次查找。如果在xxhdpi中找到目标图片,则压缩2/3来使用(因为系统认为它找到了一个比合适尺寸大的图片),如果在mdpi中找到图片,则放大2倍来使用(系统认为它找到了一个比适合尺寸小的图片,需要放大才能保证正常)。
边栏推荐
- Geoffery Hinton: The Next Big Thing in Deep Learning
- R语言ggplot2可视化:基于aes函数中的fill参数和shape参数自定义绘制分组折线图并添加数据点(散点)、使用theme函数的legend.position函数配置图例到图像右侧
- 8年软件测试工程师的感悟:与薪资相匹配的永远是实力
- One Summer of Open Source | How to Quickly Integrate Log Modules in GO Language Framework
- Oracle超全SQL,细节狂魔
- 行为型模式-模板方法模式
- 超赞!发现一个APP逆向神器!
- MySQL百万数据优化总结 一
- 行为型模式-策略模式
- npm ERR! 400 Bad Request - PUT xxx - Cannot publish over previously published version “1.0.0“.
猜你喜欢
You Only Hypothesize Once: 用旋转等变描述子估计变换做点云配准(已开源)
读博一年后对机器学习工程的思考
List-based queuing and calling system
Mysql环境变量的配置(详细图解)
你认同这个观点吗?大多数企业的数字化都只是为了缓解焦虑
日元疲软令游戏机在日本变身“理财产品”:黄牛大赚
阿里云数据存储生态计划发布,助力伙伴数据创新
只问耕耘,不问收获,其实收获却在耕耘中
Jay Chou's new song is released, crawl the "Mojito" MV barrage, and see what the fans have to say!
同样做软件测试,和月收入 3W 的学弟聊了一晚上,我彻底崩溃了
随机推荐
如何选择一块真正“好用的、性能高”的远程控制软件
行为型模式-策略模式
R语言时间序列数据的平滑:使用KernSmooth包的dpill函数和locpoly函数对时间序列数据进行平滑以消除噪声
LayaBox---TypeScript---声明合并
一体化在线政务服务平台,小程序容器技术加速建设步伐
博云入选Gartner中国DevOps代表厂商
LayaBox---TypeScript---高级类型
配置mysql失败了,这是怎么回事呢?
The realization of the list
Oracle根据时间查询
games202:三,实时环境光照IBL + PRT
MSYS2 QtCreator Clangd 代码分析找不到 mm_malloc.h的问题补救
循环语句综合练习
yolov7创新点
多大数量级会出现哈希碰撞
MySql tens of millions of paging optimization, fast insertion method of tens of millions of data
R语言使用ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、设置theme主题参数自定义表格中表头内容的填充色(使用colnames.style参数)
从零开始Blazor Server(5)--权限验证
Weak yen turns game consoles into "financial products" in Japan: scalpers make big profits
LayaBox---TypeScript---Iterator and generator