1

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

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

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

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

那么是什么决定了您的 View 获得的画布的实际尺寸?在我的例子中,画布与屏幕坐标相比缩小了三分之一。我在 3.5beta 版和 3.53 版之间找不到可能影响这一点的代码差异。

4

1 回答 1

3

我相信该应用程序没有声明支持不同密度的屏幕。<supports-screens>AndroidManifest.xml 中有一个标签,它有一个参数anyDensity。如果设置为true,则假定应用程序可以处理不同密度的屏幕,如果设置为false,Android 会自行缩放屏幕,因此应用程序可能会根据屏幕密度绘制到与实际大小不同的屏幕。

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

在您的情况下,屏幕具有高密度,对应于 1.5 系数。因此,如果您绘制到高度为 800 px 的屏幕上,这被认为与以正常密度绘制到 533 px 的屏幕上相同。

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

于 2011-04-30T15:51:29.130 回答