当前位置:网站首页>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倍来使用(系统认为它找到了一个比适合尺寸小的图片,需要放大才能保证正常)。
边栏推荐
猜你喜欢
随机推荐
你好,我的新名字叫“铜锁/Tongsuo”
R language ggplot2 visualization: use the ggbarplot function of the ggpubr package to visualize the stacked bar plot, the lab.pos parameter specifies the position of the numerical label of the bar cha
org.apache.ibatis.binding.BindingException Invalidbound statement (not found)的解决方案和造成原因分析(超详细)
全新荣威RX5,27寸大屏吸引人,安全、舒适一个不落
The 38-year-old daughter is not in love and has no stable job, the old mother is crying
LayaBox---TypeScript---Symbols
R语言使用ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、设置theme主题参数自定义表格中表头内容的填充色(使用colnames.style参数)
R语言时间序列数据算术运算:使用log函数将时间序列数据的数值对数化、使用diff函数计算对数化后的时间序列数据的逐次差分(计算价格的对数差分)
MSYS2 QtCreator Clangd 代码分析找不到 mm_malloc.h的问题补救
Why use BGP?
超赞!发现一个APP逆向神器!
MySQL百万数据优化总结 一
The R language uses the rollapply function in the zoo package to apply the specified function to the time series in a rolling manner and the window moves, and set the align parameter to specify that t
games202:三,实时环境光照IBL + PRT
LayaBox---TypeScript---高级类型
MySql tens of millions of paging optimization, fast insertion method of tens of millions of data
Unknown content monitoring
LayaBox---TypeScript---模块
MySQL模糊查询性能优化
R language ggplot2 visualization: based on the fill parameter and shape parameter in the aes function, custom draw a grouped line chart and add data points (scatter points), use the legend.position fu









