Java-旋转180度android无法正常工作

Java-旋转180度android无法正常工作,第1张

概述这个问题已经在这里有了答案:            >            Rotatingphonequickly180degrees,camerapreviewturnsupsidedown                                    2个如果我将“左侧基准”更改为“右侧基准”(均

这个问题已经在这里有了答案:            >            Rotating phone quickly 180 degrees, camera preview turns upside down                                    2个
如果我将“左侧基准”更改为“右侧基准”(均为用户的横向视图模式),则不会重新创建应用程序(活动).诚然,相机显示为水平翻转图像.当我尝试为两种纵向模式(正常和反向)更改设备位置时,结果相同.设备正常检测到90度旋转.即,左侧=>画像=>正确大小=>反像=>左侧正常工作

有可能解决这个问题吗?

我正在使用AndroID 4.4.4.

码:

    display display = ((WindowManager)context.getSystemService(WINDOW_SERVICE)).getDefaultdisplay();    if(display.getRotation() == Surface.ROTATION_0){//0        mCamera.setdisplayOrIEntation(90);    }else if(display.getRotation() == Surface.ROTATION_90){//1        mCamera.setdisplayOrIEntation(0);    }else if(display.getRotation() == Surface.ROTATION_180){//2        mCamera.setdisplayOrIEntation(270);    }else if(display.getRotation() == Surface.ROTATION_270){//3        mCamera.setdisplayOrIEntation(180);    }    Log.d(TAG, "ROTATION:" + display.getRotation() + " ");

编辑
我的意思是,当我将设备旋转180度时,永远不会调用onResume()和SurfaceCreate().

编辑功能代码

SurfaceVIEw sfv;FrameLayout fl0; @OverrIDe        public voID onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);//some code to initializefl0 = (FrameLayout) findVIEwByID(R.ID.fl0); sfv = new SurfaceVIEw(this);            fl0.addVIEw(sfv,0);addSurfaceHolder();}private voID addSurfaceHolder(){        SurfaceHolder holder = sfv.getHolder();        holder.addCallback(new SurfaceHolder.Callback() {        @OverrIDe          public voID surfaceCreated(SurfaceHolder holder) {              Log.d(TAG,TAG + " surfaceCreated");//this function never calls for 180 deg rotation.                  cameraStart(MainActivity.this,false);                  //some code for camera holder connection          }          @OverrIDe          public voID surfaceChanged(SurfaceHolder holder, int format,              int wIDth, int height) {              Log.d(TAG,TAG + " surfaceChanged");          }          @OverrIDe          public voID surfaceDestroyed(SurfaceHolder holder) {             ///Some code to destroy camera              Log.d(TAG,TAG + " surfaceDestroyed");          }        });    } @OverrIDe    protected voID onResume() {        super.onResume();        Log.d(TAG,TAG + " onResume");//call for 90 deg rotation. not for 180 deg rotation.    }public static voID cameraStart(Context context, boolean startStopPrevIEw){        if (mCamera == null)        {            mCamera = Camera.open(CAMERA_ID);//0        }         Camera.Parameters cameraParam = mCamera.getParameters();         Camera.Size prevIEwSize = cameraParam.getPrevIEwSize();         prevIEwFormat = cameraParam.getPrevIEwFormat();         frameWIDth = prevIEwSize.wIDth;         frameHeight = prevIEwSize.height;         frameRect = new Rect(0, 0, frameWIDth, frameHeight);            display display = ((WindowManager)context.getSystemService(WINDOW_SERVICE)).getDefaultdisplay();            if(display.getRotation() == Surface.ROTATION_0){//0                mCamera.setdisplayOrIEntation(90);            }else if(display.getRotation() == Surface.ROTATION_90){//1                mCamera.setdisplayOrIEntation(0);            }else if(display.getRotation() == Surface.ROTATION_180){//2                mCamera.setdisplayOrIEntation(270);            }else if(display.getRotation() == Surface.ROTATION_270){//3                mCamera.setdisplayOrIEntation(180);            }            Log.d(TAG, "ROTATION:" + display.getRotation() + " ");//just calles for 90 deg rotation. not for 180 deg.}

解决方法:

您需要获取相机的支持参数,如下所示:

Camera.Parameters parameters = camera.getParameters();

并在mCamera.setdisplayOrIEntation(int);之前添加此行;

parameters.setRotation(int);

例如:

if(display.getRotation() == Surface.ROTATION_0){//0    parameters.setRotation(90);    mCamera.setdisplayOrIEntation(90);}else if(display.getRotation() == Surface.ROTATION_90){//1    parameters.setRotation(0);    mCamera.setdisplayOrIEntation(0);}else if(display.getRotation() == Surface.ROTATION_180){//2    parameters.setRotation(270);    mCamera.setdisplayOrIEntation(270);}else if(display.getRotation() == Surface.ROTATION_270){//3    parameters.setRotation(180);    mCamera.setdisplayOrIEntation(180);}

希望这能回答您的问题

编辑

上面的代码也需要出现在onResume()方法中,因为每次更改方向时都会调用onDestroy(),然后调用onCreate(),因此onResume()需要具有这段代码以及onCreate().

编辑2

看一下OrientationEventListener

更多内容请看this问题,以获取有关OrIEntationEventListener的提示

希望您会发现此答案有用.

总结

以上是内存溢出为你收集整理的Java-旋转180度android无法正常工作全部内容,希望文章能够帮你解决Java-旋转180度android无法正常工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1079340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存