这可能是一个疯狂的问题但是:
我想有一个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:用例不是在屏幕上显示视图,而是生成视图的位图。
谢谢!
答案 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;
}