1 framwork的旋转是通过 mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);来设定
2 摄像头的旋转是通过:cameradevice.info.orotation来查看,camera.setoration()来设定的。一般只有四个方向。
3 orotationeventmanager.orotation. (这个是360角度分析的)
4 Settings.System.getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 0);这个也是framwork的
这个设定后整个系统都会有效果。而1 只会当前的actiivty起效果。
另外即时你设定nosensor了,其他方法仍然是有效的。仍然能检测到角度的变化。
其中可能会有错误,但先假设下也行,等有空的时候再验证。
最近自己做了个demo就是使用系统照相机来拍照。
但上来就整了个问题。拍出来的图像旋转了90度,通过setDisplayOrientation 让预览旋转了90度,但保持后的图片显示出来仍然会旋转90度
看来setDisplayOrientation只是旋转了摄像头的,并没有改变camera的其他属性啊。那如何改变存储呢,我明明用byte进行了旋转都不行
还是我的选择不对。public void rotate_90(byte[] data) {
Bitmap bMap = BitmapFactory.decodeByteArray(data, 0, data.length);
Bitmap bMapRotate;
Matrix matrix = new Matrix();
matrix.reset();
matrix.postRotate(90);
bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),
bMap.getHeight(), matrix, true);
bMap = bMapRotate;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bMap.compress(Bitmap.CompressFormat.JPEG, 80, baos);
data=baos.toByteArray();
}
横平的话要使用 requestWindowFeature(Window.FEATURE_NO_TITLE);
//设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
这样就看不出来是横平还是竖屏了。可悲的结果啊
今天又试了下,发现 imageview的setbitmapiamge方法会根据 屏幕的旋转角度来设置图片
导致图片有时候会旋转90度,看下我的 测试程序