Android Surface类Surface.ROTATION_不能被解析或者不是一个字段



我正在尝试修复我的相机应用程序。当我在横向模式下按住相机时,它会在屏幕上侧边预览。我发现这个修复堆栈:Android -相机预览是横向的

在我的CameraSurfaceView类构造函数中,我得到了这样的表面this.Surface = getHolder();。在surfaceChanged方法中,我根据Surface.ROTATION_<#>检查显示旋转为0,90,180和270度(方法如下)。然而,每一个ROTATION表面常数都用以下错误ROTATION_<#> cannot be resolved or is not a field下划线。我不确定我做错了什么。我的CameraSurfaceView与我的活动是分开的,所以我想知道显示器是否与它有关?希望这是正确的解释,如果你需要更多的代码或任何东西让我知道。我提前感谢这一点!

import java.io.IOException;
import java.util.List;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.ZoomControls;

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    int orientation = 0;
    Camera.Parameters params = Cam.getParameters();
    WindowManager window = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
    android.view.Display display = window.getDefaultDisplay();
        if(display.getRotation() == Surface.ROTATION_0)
        {
            params.setPreviewSize(height, width);                           
            Cam.setDisplayOrientation(90);
        }
        if(display.getRotation() == Surface.ROTATION_90)
        {
            params.setPreviewSize(height, width);                           
        }
        if(display.getRotation() == Surface.ROTATION_180)
        {
            params.setPreviewSize(height, width);               
        }
        if(display.getRotation() == Surface.ROTATION_270)
        {
            params.setPreviewSize(height, width);
            Cam.setDisplayOrientation(180);
        }

    List<Camera.Size> previewSizes = params.getSupportedPreviewSizes();
    Camera.Size previewSize = getBestPreviewSize(width, height);
    params.setPreviewSize(previewSize.width, previewSize.height); 

     int zoom = 0;
     params.setZoom(zoom);
    zoomControls.setOnZoomInClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Camera.Parameters params = Cam.getParameters();
                maxZoomLevel = params.getMaxZoom();
                    if(currentZoomLevel < maxZoomLevel){
                        currentZoomLevel++;
                        Cam.startSmoothZoom(currentZoomLevel);
                    }
            }
        });
    zoomControls.setOnZoomOutClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Camera.Parameters params = Cam.getParameters();
                maxZoomLevel = params.getMaxZoom();
                    if(currentZoomLevel > 0){
                        currentZoomLevel--;
                        Cam.startSmoothZoom(currentZoomLevel);
                    }
            }
        });    

    Cam.setParameters(params);
    try {
        Cam.setPreviewDisplay(Surface);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Cam.startPreview();
}

由于您有一个名为Surface的字段,因此您不能从您的类中访问Surface类。

你必须写

android.view.Surface.ROTATION_0

或重命名字段

您已经将您的字段命名为Surface,这也是您试图引用常量的类型的名称。重命名字段,使其不具有与类型相同的名称,然后导入android.view.Surface,您应该能够引用Surface.ROTATION_0等没有问题。

注意,Java风格通常规定变量名以小写开始,类型以大写开始,这避免了这种类型的冲突。

最新更新