val*_*lll 14 camera android orientation
我创建了一个相机应用程序,我希望我的应用程序可以在所有4种可能的方向上转动,并相应地更新相机预览.因为我使用了以下我复制过的方法: Android - 相机预览是横向的
public void updateCameraDisplay(int w, int h) {
// set preview size and make any resize, rotate or
// reformatting changes here
Log.i("CameraPreviews", "Updating camera orientation with w=" + w
+ " and h=" + h);
Parameters parameters = camera.getParameters();
Display display = getActivity().getWindowManager()
.getDefaultDisplay();
int rotation = getActivity().getResources().getConfiguration().orientation;
Log.i("CameraPreviews", "rotation is " + display.getRotation());
if (display.getRotation() == Surface.ROTATION_0) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(0);
}
if (display.getRotation() == Surface.ROTATION_90) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(270);
}
if (display.getRotation() == Surface.ROTATION_180) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(180);
}
if (display.getRotation() == Surface.ROTATION_270) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(90);
}
try {
camera.setParameters(parameters);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经调整了这些值,在三星galaxy tab2上测试它们,最终得到正确的方向,一切正常.当我在htc手机上尝试它时根本不起作用!!!!! 所有的方向都是完全错误的!所以我得出的结论是,必须是两种类型的设备(或更多......请不要!),因为旋转表示屏幕从"默认"位置旋转多少度,然后某些设备有一个默认位置和其他人.我怎么能找到这个默认轮换并在我的代码中相应地采取行动?ej:defaultOrientation =一些代码if(defaultOrientation == 0)... else ....
锁定屏幕方向是不可能的.目标api> = 11非常感谢
编辑:我已将我的代码修改为:
public void updateCameraDisplay(int w, int h) {
// set preview size and make any resize, rotate or
// reformatting changes here
Log.i("CameraPreviews", "Updating camera orientation with w=" + w
+ " and h=" + h);
Parameters parameters = camera.getParameters();
Display display = getActivity().getWindowManager()
.getDefaultDisplay();
int rotation = getActivity().getResources().getConfiguration().orientation;
Log.i("CameraPreviews", "screen rotation is " + rotation);
Log.i("CameraPreviews", "display rotation is " + display.getRotation());
if (display.getRotation() == Surface.ROTATION_0) {
if (rotation == Configuration.ORIENTATION_LANDSCAPE) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(0);
} else {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(90);
}
}
else if (display.getRotation() == Surface.ROTATION_90) {
if (rotation == Configuration.ORIENTATION_PORTRAIT) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(270);
} else {
parameters.setPreviewSize(w, h);
//camera.setDisplayOrientation(0);
}
}
else if (display.getRotation() == Surface.ROTATION_180) {
if (rotation == Configuration.ORIENTATION_LANDSCAPE) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(180);
}else {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(270);
}
}
else if (display.getRotation() == Surface.ROTATION_270) {
if (rotation == Configuration.ORIENTATION_PORTRAIT) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(90);
} else {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(180);
}
}
try {
camera.setParameters(parameters);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
只要我们不以纵向模式旋转手机,我们就可以更好地使用htc one s和samsung galaxy tab
您需要考虑的因素是:设备的方向、屏幕和摄像头之间的角度(假设您使用的是后置摄像头)以及是否启用 Activity 来感知方向变化。
而一件重要的事情是厂商实现的Camera HAL代码是否符合Google的协议。
| 归档时间: |
|
| 查看次数: |
8649 次 |
| 最近记录: |