【看项目】为什么要用nodpi?项目中的图片资源为什么放在drawable-nodpi中?
看项目
有空闲时间看他们的项目是怎么写的。
为什么要用nodpi?项目中的图片资源为什么放在drawable-nodpi中?

答案:
在 Android 中,将图片资源放在 `drawable-nodpi` 文件夹中是为了 **避免系统对图片进行自动缩放(Auto-scaling)**。这种做法通常用于以下几种场景:
---
### ✅ 为什么使用 `drawable-nodpi`
#### 🎯 核心目的:
> **让同一张图片在不同密度的设备上保持相同的物理大小和像素清晰度**。
---
### 🧠 原理说明:
Android 系统会根据设备屏幕的 **DPI(dots per inch)** 自动选择合适的资源目录(如 `drawable-mdpi`, `drawable-xhdpi` 等),并可能对图片进行缩放以适配当前设备的屏幕密度。
| 资源目录 | DPI 范围 | 举例 |
|----------|-----------|------|
| `drawable-ldpi` | ~120dpi | 低分辨率设备 |
| `drawable-mdpi` | ~160dpi | 基准密度 |
| `drawable-hdpi` | ~240dpi | 高清设备 |
| `drawable-xhdpi` | ~320dpi | 超高清设备 |
| `drawable-xxhdpi` | ~480dpi | 更高分辨率设备 |
当系统发现没有对应密度的资源时,会尝试从其他目录加载资源,并对其进行缩放处理(放大或缩小)。
---
### 📦 使用 `drawable-nodpi` 的好处:
当你将图片放在 `drawable-nodpi` 目录中时:
| 特性 | 描述 |
|------|------|
| 🔍 不缩放 | 系统不会对该目录下的资源进行自动缩放 |
| 🖼️ 原始尺寸显示 | 图片始终以原始像素大小显示 |
| 📱 适用于特定用途 | 如:启动图、矢量图、全屏背景等需要严格控制像素的场景 |
---
### 🚫 一般不建议使用的场景:
| 场景 | 原因 |
|------|------|
| 普通图标、按钮图 | 应该使用对应 dpi 的资源目录来保证 UI 在不同设备上的清晰度 |
| 需要适配不同分辨率的 UI 组件 | 缩放后可能会模糊或变形 |
---
### ✅ 推荐使用 `drawable-nodpi` 的场景:
| 使用场景 | 原因 |
|----------|------|
| 启动页、开机动画 | 避免被系统缩放导致黑边或拉伸变形 |
| 全屏背景图 | 保证视觉一致性,避免多次缩放影响性能 |
| 游戏贴图 / 特效图 | 需要精确控制像素位置和大小 |
| 已经是最高分辨率的图 | 不希望系统再缩放 |
| 矢量图(SVG/Android Vector Drawable) | 矢量图本身可缩放,但有时也放在 `nodpi` 中统一管理 |
---
### 🛠 示例代码结构:
```
res/
├── drawable/
├── drawable-nodpi/
│ └── background.png
├── drawable-mdpi/
├── drawable-hdpi/
└── ...
```
在这种情况下,`background.png` 将不会被系统自动缩放,无论设备屏幕密度是多少。
---
### 📝 注意事项:
1. **内存占用问题**:
- 如果你放入的是大图(如 1920x1080 的 PNG),在低端设备上可能会造成内存压力。
- 建议配合 [BitmapFactory.Options.inJustDecodeBounds] 和 [inScaled] 控制加载方式。
2. **兼容性问题**:
- 对于一些老版本 Android(低于 API 17)可能支持不够完善,建议测试不同设备表现。
3. **优先级问题**:
- 如果同时存在多个同名资源文件(例如 `drawable-xhdpi/icon.png` 和 `drawable-nodpi/icon.png`),系统会优先选择匹配当前设备密度的资源。
---
### 🧪 举个例子:
```xml
<!-- layout.xml -->
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/background" />
```
假设 `background.png` 是一张 1080x1920 的图片:
- 放在 `drawable-nodpi`:直接按原尺寸显示,不会缩放。
- 放在 `drawable-xhdpi`:在更高密度设备上会被缩小,在更低密度设备上会被放大。
---
### 📌 总结:
| 条件 | 是否推荐使用 `drawable-nodpi` |
|------|------------------------------|
| 图片不需要缩放 | ✅ 是 |
| 图片是全屏背景、启动图 | ✅ 是 |
| 图片已是最高质量 | ✅ 是 |
| 图片是图标、小控件 | ❌ 否 |
| 需要适配多种分辨率 | ❌ 否 |
---
如果你正在开发 TV 应用或需要固定尺寸展示的资源(如演唱会详情页背景图),放在 `drawable-nodpi` 是合理的选择。
如果你有具体的应用场景,可以告诉我,我可以帮你判断是否适合使用这个目录。
----
收获:

另外,关于缩放

如果需要适配多种分辨率的话就不能用nodpi了。

浙公网安备 33010602011771号