我有一个超过300个位图的列表,用户可以将其放置在surfaceview屏幕上。我为每个图像都有密度XHDPI,HDPI,MDPI和LDPI的资源。问题是当用户拥有较小的高密度屏幕时,他们使用较大的资源(XHDPI)占据了他们的大部分屏幕。
图像在7"平板电脑屏幕(Galaxy Tab 2 7.0),但带有4"屏幕和图像太大了。
如何根据用户屏幕尺寸缩放位图,以便每个用户都可以获得相同的体验?
答案 0 :(得分:1)
我相信我已经弄清楚它实际上相当简单。基本上我采用原始位图的width()和height()并将它们转换为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;
}