我正在开发一个使用相机的应用程序。到目前为止,一切都很顺利,只是我无法强制将方向设置为“竖屏”。如果我强制所有活动都是“横屏”,似乎效果很好,因为相机预览似乎适合横屏。
有没有办法在竖屏模式下使用相机?
我正在开发一个使用相机的应用程序。到目前为止,一切都很顺利,只是我无法强制将方向设置为“竖屏”。如果我强制所有活动都是“横屏”,似乎效果很好,因为相机预览似乎适合横屏。
有没有办法在竖屏模式下使用相机?
Android设备v2.2及以上版本包含旋转显示到竖屏的API。2.2以下的设备只能横屏显示。最好的做法是检测设备是否为2.2并旋转90度。对于2.2以下的设备,请回退到横屏显示。好消息是大多数Android设备都在2.2及以上版本。
欲了解更多信息,请查看我在此处的答案:
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;
}
}
编辑:我当时正在进行Adobe AIR for Android开发,回答这个问题时,回顾一下,我意识到这个问题与Adobe AIR无关。
Adobe表示:
在可以更改屏幕方向的设备上(例如移动电话),连接到摄像头的视频对象仅会在横向纵横比方向上显示直立视频。因此,移动应用程序在显示视频时应使用横向方向,并且不应自动旋转。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html
如果您确实想在竖屏模式下使用相机,我的建议是旋转视频对象。 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;