首页 > 解决方案 > getDisplayMetrics() 返回不正确的密度和屏幕尺寸

问题描述

我正在编写一个使用大型 (1024x1024) 位图的应用程序。我注意到在渲染时性能会显着下降,所以我想以像素为单位计算其 ImageView 的确切大小,以便位图可以缩放一次,而不是在每一帧内部缩放(即我假设目前正在发生的事情 - 分析器告诉我,当图像在屏幕上时,仅内部 draw() 函数就需要大约 30 毫秒)

但是,我不确定如何确保我的图像不会在内部缩放,因为显示管理器的分辨率和密度完全关闭。

getWindowManager().getDefaultDisplay().getRealMetrics() 返回

density=3.00000, densityDpi=480, heightPixels=1920, scaledDensity=3.00000, widthPixels=1080, xdpi=442.451, ydpi=443.345

getWindowManager().getDefaultDisplay().getMetrics() 返回

density=1.00000, densityDpi=160, heightPixels=526, scaledDensity=1.00000, widthPixels=320, xdpi=147.484, ydpi=147.782

虽然 getResources().getDisplayMetrics() 返回

density=1.00000, densityDpi=160, heightPixels=175, scaledDensity=1.00000, widthPixels=107, xdpi=147.484, ydpi=147.782

问题是所有布局计算(包括 px 单位)都基于后两者,而不是前者。这是在我的Moto G5上运行的。

我假设我的AndroidManifest.xml或中缺少一些东西activity_main.xml

标签: android

解决方案


AndroidManifest.xml确保直接在该部分内设置 SDK 版本manifest,例如。

<uses-sdk
  android:minSdkVersion="15"
  android:targetSdkVersion="28"
/>

我在尝试让硬件加速工作时发现了它,我注意到它与窗口管理器相关联。

文档

如果您的 Target API 级别 >=14,则默认启用硬件加速,但也可以显式启用。


推荐阅读