这可能是一个疯狂的问题但是:
我想要一个 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/