在surfaceview上缩放位图,用于较小的高密度屏幕

时间:2014-02-09 23:11:10

标签: android bitmap surfaceview

我有一个超过300个位图的列表,用户可以将其放置在surfaceview屏幕上。我为每个图像都有密度XHDPI,HDPI,MDPI和LDPI的资源。问题是当用户拥有较小的高密度屏幕时,他们使用较大的资源(XHDPI)占据了他们的大部分屏幕。

图像在7"平板电脑屏幕(Galaxy Tab 2 7.0),但带有4"屏幕和图像太大了。

如何根据用户屏幕尺寸缩放位图,以便每个用户都可以获得相同的体验?

1 个答案:

答案 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;
         }