在纵向方向使用相机

6

我正在开发一个使用相机的应用程序。到目前为止,一切都很顺利,只是我无法强制将方向设置为“竖屏”。如果我强制所有活动都是“横屏”,似乎效果很好,因为相机预览似乎适合横屏。

有没有办法在竖屏模式下使用相机?


正在G1设备上或非G1设备上运行,因为G1s在方向上存在显示相机预览错误。 - Fred Grott
嗨Fred,我正在使用三星Galaxy S... - paperclip
3个回答

6

Android设备v2.2及以上版本包含旋转显示到竖屏的API。2.2以下的设备只能横屏显示。最好的做法是检测设备是否为2.2并旋转90度。对于2.2以下的设备,请回退到横屏显示。好消息是大多数Android设备都在2.2及以上版本。

欲了解更多信息,请查看我在此处的答案:

相机错误,除非键盘打开


良好的知识,我能看到很多人遇到这个问题却找不到解决方案。 - owen gerig
你可能想在你的应用程序中添加一个设置,允许用户强制横屏。我已经测试过了,似乎有些设备无法强制竖屏。到目前为止,我知道这些设备无法设置为纵向,即使使用Android 2.2+: "GT-S6102", "GT-S5360", "GT-S5660", "YP-G1", "YP-G70"。 我相信还有很多其他设备 :/ - Jorge Cevallos

3
public void surfaceCreated(SurfaceHolder holder)
{
// The Surface has been created, acquire the camera and tell it where to draw.
mCamera = Camera.open();

Parameters params = mCamera.getParameters();

if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)
{
params.set("orientation", "portrait");
mCamera.setDisplayOrientation(90);
}

try
{
mCamera.setPreviewDisplay(holder);
}
catch (IOException exception)
{
mCamera.release();
mCamera = null;
}

}

-1

编辑:我当时正在进行Adobe AIR for Android开发,回答这个问题时,回顾一下,我意识到这个问题与Adobe AIR无关。

Adobe表示:

在可以更改屏幕方向的设备上(例如移动电话),连接到摄像头的视频对象仅会在横向纵横比方向上显示直立视频。因此,移动应用程序在显示视频时应使用横向方向,并且不应自动旋转。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html

如果您确实想在竖屏模式下使用相机,我的建议是旋转视频对象。
以下是一些示例代码,它通过角度(源代码取自stackoverflow其他地方)旋转视频对象(_video):
        var matrix:Matrix = _video.transform.matrix; 
        var rect:Rectangle = _video.getBounds(this); 
        matrix.translate(- (rect.left + (rect.width/2)), - (rect.top + (rect.height/2))); 
        matrix.rotate((angle/180)*Math.PI); 
        matrix.translate(rect.left + (rect.width/2), rect.top + (rect.height/2));
        _video.transform.matrix = matrix;

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