我正在尝试开发一款使用相机的应用。到目前为止它一直运作良好,除了我不能强迫定位为“肖像”。如果我将所有活动强制为“风景”,似乎效果很好,因为相机预览似乎适合风景。
无论如何都要以纵向模式使用相机吗?
答案 0 :(得分:6)
Android设备v2.2及更高版本包含用于将显示旋转为纵向的API。 2.2以下的设备仅适用于景观。最好的办法是检测设备是否为2.2并旋转90度。回到2.2以下设备的景观。好消息是大多数Android设备都在2.2及以上版本。
点击此处查看我的答案以获取更多信息:
答案 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无关。
Adobe说:
在可以更改屏幕方向的设备(例如移动电话)上,连接到相机的视频对象将仅以横向方向显示直立视频。因此,移动应用在显示视频时应使用横向方向,不应自动旋转。
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;