如果你想扩展自己的形象,把一个副本:
res/drawable-nodpi
确保资源在没有其他文件夹。
加载位图是这样的:
Bitmap bitmap = BitmapFactory.decodeResource(
context.getResources(),
R.drawable.my_image
);
调整它的大小是这样的:
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
然后它画到画布:
canvas.drawBitmap(bitmap, 0, 0, null);
这就是你需要知道的最少完成工作。
其他注意事项
通常,Android基于当前屏幕密度RES /可绘制文件夹的一个选择你的形象。
大多数图像格式都没有密度信息,所以Android根据从中加载的文件夹对位图密度进行了假设。
这意味着它可以执行自己的缩放以匹配加载位图的密度和画布密度。
当您加载位图时,Android检查并匹配一次密度,并且当您绘制位图时,再次。
当你正在做自己的缩放时,你通常希望防止OS干扰。有几种方法可以做到这一点:
1.使用RES /绘制-nodpi
这是我在简单的例子概括上面的策略。如果要打包你的形象作为一种资源,而且还控制自己的尺度,把它放在这里,而且只能在这里:
res/drawable-nodpi
如果您需要支持蛋糕,放上一份副本中每个文件夹,而不是:
res/drawable-nodpi-v4
res/drawable
解码器会自动提供防止缩放的选项。然后,Android将图像密度设置为与屏幕相匹配,因此在绘制时也不会缩放。 The compiler will apply lossless compression to images placed in res/drawable-xxx folders。
2.使用RES /生
您可以通过编译器,如果你把它留下图像不变:
res/raw
但你必须要小心,以防止在运行时缩放:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false; // Prevents scaling at decode time.
Bitmap bitmap = BitmapFactory.decodeResource(
context.getResources(),
R.raw.my_image,
options
);
bitmap.setDensity(Bitmap.DENSITY_NONE); // Prevents scaling at draw time.
3.使用资产文件夹
如果您将图片放在资产文件夹中,而不是res,则可以使用实际文件夹结构来组织它们。加载一个位图的资产是这样的:
Bitmap bitmap = BitmapFactory.decodeStream(
context.getAssets().open(
"myfolder/my_image.png",
AssetManager.ACCESS_BUFFER
)
);
编译器不会去碰它,它加载不进行缩放,并且它的密度设置为屏幕匹配,所以当你要么绘制它不会缩放。
(PERFORMANCE注:Android的加载图像之前,它必须找到该文件A resource is faster to locate than an asset,所以有可能是,如果您打包图像作为资产之间存在一定的性能损失。)
你使用哪种scaleType? – 2011-02-26 11:42:16
对不起,我将添加更多详细信息 – 2011-02-26 11:43:53