【问题标题】:Scale bitmap on surfaceview for smaller high density screens在表面视图上缩放位图以用于较小的高密度屏幕
【发布时间】:2023-03-23 19:38:01
【问题描述】:
我有一个包含 300 多个位图的列表,用户可以将它们放置在表面视图屏幕上。对于这些图像中的每一个,我都有密度 XHDPI、HDPI、MDPI 和 LDPI 的资源。问题是,当用户的屏幕较小但密度较高时,他们会使用占用大部分屏幕的较大资源 (XHDPI)。
图像在 7 英寸平板电脑屏幕(Galaxy Tab 2 7.0)上显示完美,但使用 4 英寸屏幕的设备,图像太大。
如何根据用户的屏幕尺寸缩放位图,以便每个用户都能获得相同的体验?
【问题讨论】:
标签:
android
bitmap
surfaceview
【解决方案1】:
我相信我已经弄清楚了,而且实际上相当简单。基本上我取原始位图的宽度()和高度()并将它们转换为 dp,然后使用新的 dp 高度和宽度值缩放位图。结果是一个在所有屏幕上大小相同的位图。我仍在对此进行测试,但到目前为止,它已在我加载的每个模拟器上运行。
public BitmapDrawable getScaledBitmapDrawable(int indexID) {
Bitmap bitmapOrg = BitmapFactory.decodeResource(mResources,
myNewImageList.get(indexID));
int width = bitmapOrg.getWidth();
int height = bitmapOrg.getHeight();
int nwidth = (int) convertPixelsToDp(width,c);
int nheight = (int) convertPixelsToDp(height,c);
Bitmap bitmapResized = Bitmap.createScaledBitmap(bitmapOrg, nwidth,
nheight, false);
return BitmapDrawable bitmapDrawable = new BitmapDrawable(mResources,
bitmapResized);
}
//conversion method
public static float convertPixelsToDp(float px, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float dp = px / (metrics.densityDpi / 160f);
return dp;
}