Android - 使用PNG文件在画布上设置背景

时间:2012-05-26 10:04:57

标签: android png resolution android-canvas bitmapfactory

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

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

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

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

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

提前谢谢。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

你把图像放在哪里了?如果它在drawable或drawable-mdpi中,它将比你告诉的更大,因为WVGA800具有高密度(hdpi)。

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

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

答案 2 :(得分:0)

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

Bitmap bitmap;

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

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

并在构造函数中调用方法