什么决定了视图中的初始Canvas维度?

时间:2011-04-30 15:33:25

标签: android zxing

我正在使用1.6版ZXing条码扫描器代码。

虽然Android Market(3.53)上这个应用程序的版本在我的Incredible上运行良好,但是当我自己编译时,ViewFinderView看起来不对(3.5beta)。

我发现ViewFinderView(填满整个屏幕)的默认画布大小为533x320,而实际屏幕尺寸为800x480。

因此在onDraw方法中,ViewFinderView假定取景器矩形的屏幕坐标,但在onDraw的画布坐标中应用它们。这会导致取景器在x和y维度上被绘制得太远和太大。

那么是什么决定了你的View获得的画布的实际尺寸?就我而言,与屏幕坐标相比,画布缩小了三分之一。在版本3.5beta和3.53之间,我找不到可能影响此代码的任何差异。

1 个答案:

答案 0 :(得分:3)

我相信该应用程序并未声明支持不同密度的屏幕。 AndroidManifest.xml中有一个名为<supports-screens>的标记,它有一个参数anyDensity。如果设置为true,则假设应用程序可以处理具有不同密度的屏幕,如果设置为false,Android会缩放屏幕本身,以便应用可能会绘制到与实际不同的屏幕取决于屏幕密度。

默认情况下,如果应用程序的API级别为4及更高,则此参数设置为true,否则设置为false。这样做是因为在Android 1.6应用程序是针对固定的屏幕尺寸和密度制作之前,从Android 1.6开始这种情况发生了变化,因此必须保持向后兼容性。

在您的情况下,屏幕具有高密度,相当于1.5系数。因此,如果您绘制到高度为800像素的屏幕,这与绘制到具有正常密度的533像素的屏幕相同。

如果您希望Canvas具有“真实”尺寸,则anyDensity必须设置为true或至少minSdkVersion设置为4及更高版本。