android 旋转角度总结

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度,看下我的 测试程序



你可能感兴趣的:(android 旋转角度总结)