Android 不同设备上的预览纵横比不同

Android 不同设备上的预览纵横比不同,android,Android,在我的应用程序中,我有一个预览屏幕。在一台设备(LG,安卓2.2,320x480屏幕)和另一台设备(HTC,安卓2.3,480x800屏幕)上,一切正常。在这两种情况下,支持的预览大小列表都包括一个完全适合屏幕大小的大小,我选择了它,图像就完美了。 这个问题来自另一个设备,它的屏幕与第一个类似(三星,安卓2.3,320x480屏幕)。不管我选择了一个适合屏幕大小的预览大小,就像在以前的例子中一样,图像不会保留其纵横比;圆圈呈椭圆形;图像沿屏幕的短轴压缩。似乎硬件本身为了获得320x480预览,会

在我的应用程序中,我有一个预览屏幕。在一台设备(LG,安卓2.2,320x480屏幕)和另一台设备(HTC,安卓2.3,480x800屏幕)上,一切正常。在这两种情况下,支持的预览大小列表都包括一个完全适合屏幕大小的大小,我选择了它,图像就完美了。 这个问题来自另一个设备,它的屏幕与第一个类似(三星,安卓2.3,320x480屏幕)。不管我选择了一个适合屏幕大小的预览大小,就像在以前的例子中一样,图像不会保留其纵横比;圆圈呈椭圆形;图像沿屏幕的短轴压缩。似乎硬件本身为了获得320x480预览,会挤压图像(相机的形状系数为4:3,而屏幕的形状系数为3:2)。 因此,我修改了预览显示的视图的布局参数,以适应相机的形状系数(尺寸:360x480)。这部分解决了问题;实际上,为了完全解决问题,我必须设置380x480(!!!)。 事实上,我不可能找到任何API来告诉我这种不同的行为,这样我就可以自动补偿它。即使是和似乎也没有帮助;它们在所有三个设备上给出相同的值!
有人能帮我吗?

经过深入的调查,包括编写特殊代码来检查预览在屏幕上的实际显示方式,这就是我发现的。 在一台设备(LG E-720)上,对预览图像进行裁剪以获得3:2的形状系数,然后调整其大小以适合屏幕。保留纵横比:

在第二台设备(Samsung ACE)上,预览图像似乎以不同的方式被裁剪,从而生成一个5:4的图像(!?),然后调整图像大小以适应屏幕。由于形状因素不同,屏幕上的图像似乎受到挤压:


我已经检查了第二台设备是否有软件更新,但事实并非如此。因此,为了在屏幕上获得大致正确的图像,我将目标视图定义为384像素高;这实际上会导致裁剪,从而恢复正确的纵横比。不过,这并不能补偿较小的水平分辨率ft是因为原始裁剪是水平不对称的。

根据我的经验,这种问题在大多数(如果不是所有的话)三星设备上都会发生。我找不到比在代码库中永久切换更好的解决方案。我一点也不喜欢这样。