【问题标题】:Android - Setting background on canvas using PNG fileAndroid - 使用 PNG 文件在画布上设置背景
【发布时间】:2012-06-01 16:17:18
【问题描述】:

我正在尝试在我的应用程序中将 .PNG 文件设置为 Canvas 的背景。我制作了一张 480 x 800 的图片并使用了这种方法:

canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), 
                  R.drawable.image_1), 0, 0, null);

我已经启动了一个模拟器 (WVGA800),但我的图像看起来比设备的屏幕大。

如何调整此图像的大小或应使用哪种方法使此图像匹配良好。

其次,有没有什么方法可以让不同屏幕分辨率的设备通用这样的背景?

提前谢谢你。

【问题讨论】:

  • 在将图像设置到画布之前,您最好先获取设备尺寸。并且,将该高度和宽度设置为您的图像。希望对您有所帮助。
  • 如果它是静态图像,您可以设置您正在绘制的画布的视图的背景,然后在您的绘图方法之前调用 super.onDraw()。使用 scaleType 您可以让 Android 为您调整大小...

标签: android png resolution android-canvas bitmapfactory


【解决方案1】:

试试这个...

设置位图

Bitmap mFinalbitmap= BitmapFactory.decodeResource(getResources(), R.drawable.image_1);

根据您的宽度和高度调整位图大小

mFinalbitmap= resizeImage(mFinalbitmap, width ,height);

设置位图的画布

canvas.drawBitmap(mFinalbitmap, 0, 0, null);

调整大小功能:根据图像的x和y保持

public Bitmap resizeImage(Bitmap image,int maxWidth, int maxHeight)
{
    Bitmap resizedImage = null;
    try {
        int imageHeight = image.getHeight();


        if (imageHeight > maxHeight)
            imageHeight = maxHeight;
        int imageWidth = (imageHeight * image.getWidth())
                / image.getHeight();

        if (imageWidth > maxWidth) {
            imageWidth = maxWidth;
            imageHeight = (imageWidth * image.getHeight())
                    / image.getWidth();
        }

        if (imageHeight > maxHeight)
            imageHeight = maxHeight;
        if (imageWidth > maxWidth)
            imageWidth = maxWidth;


        resizedImage = Bitmap.createScaledBitmap(image, imageWidth,
                imageHeight, true);
    } catch (OutOfMemoryError e) {

        e.printStackTrace();
    }catch(NullPointerException e)
    {
        e.printStackTrace();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return resizedImage;
}

【讨论】:

    【解决方案2】:

    你把图片放在哪里了?如果它在 drawable 或 drawable-mdpi 中,它将比您所说的要大,因为 WVGA800 具有高密度 (hdpi)。

    即使你把它放在 drawable-hdpi 文件夹中,它也适用于 WVGA800,但它可能在其他具有不同分辨率和纵横比的设备上显示效果不佳。

    您需要处理纵横比的缩放和保持(如果您愿意)。否则,您将在其他设备上遇到同样的问题。

    【讨论】:

      【解决方案3】:

      最简单的方法: 在你的类中声明静态位图:

      Bitmap bitmap;
      

      设置调整大小的位图,例如您希望将位图调整为 100x100:

          private void initBitmap(){
                  bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.Your_bitmap);
                  bitmap = Bitmap.createScaledBitmap(bitmap, 100,100,true);
          }
      

      在构造函数中调用方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-15
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 2017-11-10
        • 1970-01-01
        相关资源
        最近更新 更多