位图 + 画布密度依赖

3
我无法想象如何在位图上绘制(借助画布)才能使结果不依赖设备密度。

以下是绘制代码:

ImageView iv = (ImageView)findViewById(R.id.container);
Bitmap result = BitmapFactory.decodeResource(getResources(), R.drawable.big_picture).copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.small_picture), actualX, actualY, null);
iv.setImageBitmap(result);

我在Bitmap result中加载了一张big_picture,并想在其上绘制一张small_picture,但需要指定位置。如果我设置actualX和actualY,那么在同样密度的设备上就可以正常运行。但是,不同密度的设备会“缩放”画布。

有趣的是,只有small_picture被“缩放”,超出了屏幕范围,而其后面的big_picture却可以在任何密度的屏幕上完美适配屏幕。 为什么会这样?如何在big_picture与density无关的情况下绘制small_picture? 谢谢!

1个回答

2

通过调试Bitmap,我已经找出了问题所在。除非将图像放置到drawable-nodpi中,否则图像将被重新调整大小以匹配标称设备密度(即120、160、240、320)。如果将图像“加载”到BitmapCanvas中,则它们将具有其中一种密度,而不管原始图像的密度如何。

因此,一个解决方案是将图像放置到drawable-nodpi中。这样它们在所有密度下的行为都将相同。

另一个解决方案是基于上述密度的比率来乘以坐标。

……或者您可以为所有限定符制作自定义图像和坐标。


1
另一个选项是传递一个 BitmapFactory.Options 对象,其中 inScaled = false:http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html - Lawrence D'Oliveiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接