在纵向方向使用相机

时间:2010-09-11 14:52:39

标签: android

我正在尝试开发一款使用相机的应用。到目前为止它一直运作良好,除了我不能强迫定位为“肖像”。如果我将所有活动强制为“风景”,似乎效果很好,因为相机预览似乎适合风景。

无论如何都要以纵向模式使用相机吗?

3 个答案:

答案 0 :(得分:6)

Android设备v2.2及更高版本包含用于将显示旋转为纵向的API。 2.2以下的设备仅适用于景观。最好的办法是检测设备是否为2.2并旋转90度。回到2.2以下设备的景观。好消息是大多数Android设备都在2.2及以上版本。

点击此处查看我的答案以获取更多信息:

Camera is wrong unless keyboard is open

答案 1 :(得分: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;
}

}

答案 2 :(得分:-1)

编辑:当我回答这个问题时,我正处于Adobe AIR for Android开发阶段,回头看看,我发现这个问题与Adobe AIR无关。

Adob​​e说:

  

在可以更改屏幕方向的设备(例如移动电话)上,连接到相机的视频对象将仅以横向方向显示直立视频。因此,移动应用在显示视频时应使用横向方向,不应自动旋转。

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

如果您确实想在纵向模式下使用相机,我的建议是旋转视频对象。

下面是一些示例代码,用于将视频对象(_video)旋转一个角度(度量从stackoverflow上的其他位置拉出):

        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;