我正在使用1.6版ZXing条码扫描器代码。
虽然Android Market(3.53)上这个应用程序的版本在我的Incredible上运行良好,但是当我自己编译时,ViewFinderView看起来不对(3.5beta)。
我发现ViewFinderView(填满整个屏幕)的默认画布大小为533x320,而实际屏幕尺寸为800x480。
因此在onDraw方法中,ViewFinderView假定取景器矩形的屏幕坐标,但在onDraw的画布坐标中应用它们。这会导致取景器在x和y维度上被绘制得太远和太大。
那么是什么决定了你的View获得的画布的实际尺寸?就我而言,与屏幕坐标相比,画布缩小了三分之一。在版本3.5beta和3.53之间,我找不到可能影响此代码的任何差异。
答案 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及更高版本。