0

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

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

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

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

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

先感谢您。

4

3 回答 3

3

试试这个...

设置位图

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;
}
于 2012-05-26T10:13:36.437 回答
0

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

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

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

于 2012-05-26T10:36:14.087 回答
0

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

Bitmap bitmap;

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

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

并在构造函数中调用方法

于 2014-10-19T07:40:51.137 回答