【问题标题】: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;
             }
    

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 2011-12-24
      • 2020-07-27
      • 1970-01-01
      • 2014-01-18
      • 2022-09-28
      相关资源
      最近更新 更多