由 ImageView 获取到的 Drawable 对象,它的 intrinsicWidth、intrinsicWidth 与实际图片的尺寸

xml 复制代码
<ImageView
    android:id="@+id/iv_test"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@mipmap/test" />
java 复制代码
ImageView ivTest = findViewById(R.id.iv_test);

int width = ivTest.getWidth();
int height = ivTest.getHeight();

Drawable drawable = ivTest.getDrawable();

int intrinsicWidth = drawable.getIntrinsicWidth();
int intrinsicHeight = drawable.getIntrinsicHeight();

Log.i(TAG, "width: " + width);
Log.i(TAG, "height: " + height);

Log.i(TAG, "intrinsicWidth: " + intrinsicWidth);
Log.i(TAG, "intrinsicHeight: " + intrinsicHeight);
复制代码
# 输出结果

width: 200
height: 200
intrinsicWidth: 845
intrinsicHeight: 845
  1. 在 Android 开发中,由 ImageView 获取到 Drawable 对象

  2. Drawable 对象的 intrinsicWidth 与 intrinsicWidth 为 845 * 845,实际图片的尺寸为 634 * 634

问题解读
  1. intrinsicWidth 与 intrinsicHeight 是 Drawable 对象的固有尺寸,即图片 @mipmap/test 的原始尺寸

  2. 但实际图片的尺寸为 634 * 634,而 Android 系统会根据设备的密度进行缩放,以适应不同的屏幕

密度类型 密度值 缩放比例 目录后缀
ldpi 120dpi 0.75x -ldpi
mdpi 160dpi 1.0x -mdpi
hdpi 240dpi 1.5x -hdpi
xhdpi 320dpi 2.0x -xhdpi
xxhdpi 480dpi 3.0x -xxhdpi
xxxhdpi 640dpi 4.0x -xxxhdpi
  1. @mipmap/test 存放在 mipmap-hdpi 目录下,而设备的密度如下
java 复制代码
DisplayMetrics metrics = getResources().getDisplayMetrics();

float density = metrics.density;
int densityDpi = metrics.densityDpi;

Log.i(TAG, "density: " + density);
Log.i(TAG, "densityDpi: " + densityDpi);
复制代码
# 输出结果

density: 2.0
densityDpi: 320
  1. 根据设备的密度值为 320、缩放比例为 2.0x 进行计算

    使用密度值计算

    缩放因子 = 设备密度值 / 资源密度值 = 320 / 240 = 1.333...
    报告尺寸 = 634 × 1.333... ≈ 845px

    使用缩放比例计算

    缩放因子 = 设备缩放比例 / 资源缩放比例 = 2.0 / 1.5 = 1.333...
    报告尺寸 = 634 × 1.333... ≈ 845px

相关推荐
哦虎!4 小时前
【JavaEE】网络初识
java
for_ever_love__5 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
程序猿追5 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓6 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播6 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
欣栀♡6 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室6 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项6 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
墨云安全6 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php