Bitmap too large to be uploaded into a texture
可能导致设备点硬件加速失败,而导致程序运行异常。
drawable 资源文件与相应DPI之间的关系
drawable | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi |
---|---|---|---|---|---|
density | 1 | 1.5 | 2 | 3 | 4 |
densitydpi | 160 | 240 | 320 | 480 | 640 |
假设把图片直接放在drawble目录下,对应的density是1,某设备分辨率是1920 * 1080,设备的density大约是xxhdpi,也就是说,图片实际加载到内存中的时候,实际占用内存会是:图片宽度图片高度4*3 字节 。因为这台设备的dpi是3,而图片放在drawble目录下,默认是1,所以要适配到这台设备上,就要放大3倍。
默认的图片格式是ARGB_8888
一个像素用4个字节表示
其他知识点
分辨率(PX)
分辨率就是手机屏幕的像素点数。一般为屏幕的“宽×高”,例如分辨率有720×1280的手机设备,表示此屏幕在宽度方向有720个像素点,在高度方向有1280个像素点。
屏幕尺寸(英寸inch)
按屏幕对角测量的实际物理尺寸。为简便起见,Android 将所有实际屏幕尺寸分组为四种通用尺寸:小、 正常、大和超大,以英寸(inch)为单位。例如有个5寸的手机设备,是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。
屏幕密度(DPI)
就是每英寸的像素点数,数值越高当然显示越清晰,通常 与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定物理区域的像素较少。
密度无关像素 (dp)
在定义 UI 布局时应使用的虚拟像素单位,用于以密度无关方式表示布局维度 或位置。 密度无关像素等于 160 dpi 屏幕上的一个物理像素,这是 系统为“中”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。
dp、dpi与px的换算
计算相关公式:
1
2
3
px = dpValue * density + 0.5f;
dp = pxValue / density + 0.5f;