android - 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
?
解决方案
AndroidManifest.xml
确保直接在该部分内设置 SDK 版本manifest
,例如。
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="28"
/>
我在尝试让硬件加速工作时发现了它,我注意到它与窗口管理器相关联。
从文档:
如果您的 Target API 级别 >=14,则默认启用硬件加速,但也可以显式启用。
推荐阅读
- excel - Excel Activex 列表框在矩形单击时打开,列表框不在焦点时关闭,并将选择输出到单元格
- javascript - forEach 里面的 forEach 有条件吗?
- excel - 如何用奇数编写 if else 语句
- c - dup 标志在 libmosquitto 中不可用
- reactjs - 具有最基本形式的对象的javascript数组
- javascript - 当 websocket 服务器在线时 button.onclick 不起作用
- xaml - 如何在 ListView 上使用 CanContentRenderOutsideBounds
- python - Python - Mysqldb 安装错误 [错误:命令错误退出状态为 1:]
- python - 使用 Reticulate 在 R Markdown 中的 Python 打印查询
- python - 使用 AWK 更正大型数据集?