android,覆盖屏幕密度

时间:2014-08-25 18:29:47

标签: android android-layout android-bitmap

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

我想有一个LayoutInflater,我可以覆盖密度,所以 xxhdpi 设备 1dp 1像素,而不是3像素。

我使用时基本上有一个360x720dp的FrameLayout(视图):

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:用例不是在屏幕上显示视图,而是生成视图的位图。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

// 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;
}