android,覆盖屏幕密度

标签 android android-layout android-bitmap

这可能是一个疯狂的问题但是:

我想要一个 LayoutInflater,我可以在其中覆盖密度,因此在 xxhdpi 设备上 1dp 将是 1 像素,而不是 3像素。

基本上我有一个 360x720dp 的 FrameLayout( View ),当我使用时:

FrameLayout viewToSnapshot = LayoutInflater.From(...).inflate(...);
Bitmap bitmap = Bitmap.createBitmap(viewToSnapshot.getMeasuredWidth(), viewToSnapshot.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
viewToSnapshot.draw(c);

在 xxhdpi 上,它创建了一个 1080x2160px 位图,这太大了。我想改为创建 360x720px 位图。我可以重新缩放它,但之前它可能会因 OutOfMemoryError 而失败。

PS:用例不是在屏幕上显示 View 而是生成 View 的位图。

谢谢!

最佳答案

我通过更新显示指标的代码得到了我想要的:

// Update the density used for the bitmap
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
final float densityBefore = metrics.density;
final float scaledDensityBefore = metrics.scaledDensity;
metrics.density = 1.0f;
metrics.scaledDensity = 1.0f;
try {
  FrameLayout viewToSnapshot = LayoutInflater.from(context).inflate(...);
  Bitmap bitmap = Bitmap.createBitmap(viewToSnapshot.getMeasuredWidth(), viewToSnapshot.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
  Canvas c = new Canvas(bitmap);
  viewToSnapshot.draw(c);
  ...
} finally {
  metrics.density = densityBefore;
  metrics.scaledDensity = scaledDensityBefore;
}

关于android,覆盖屏幕密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25492192/

相关文章:

android - Android Room 数据库可以存储多少 Kbs/Mbs/Gbs 数据?

Android connectedCheck 任务在与构建任务一起运行但单独运行时失败

android - 有没有办法检查 android WindowManager 是否已经包含一个 View ?

android - Alpha 属性仅适用于 Android Lollipop,为什么?

android - 位图到uri转换android?

android - 如何修复构建工具 (22.0.0/1) 依赖性问题

java - 将参数链接到函数

Android - 相对布局水平对齐项目,以便它们之间始终具有相同的空间

java - 如何像在 xml 中那样改变 java 中 textview 的位置

Android保存透明背景的Textview