문제

I'm trying to fix my camera app. When i hold the camera in landscape mode, it previews on the screen sideways. I found this fix on stack : Android - Camera preview is sideways

In my CameraSurfaceView class constructor, I get the surface like this this.Surface = getHolder();. In the surfaceChanged method i check the display rotation against Surface.ROTATION_<#> for 0,90,180,and 270 degrees (method below). However, each one of the ROTATIONSurface constants is underlined with the following error ROTATION_<#> cannot be resolved or is not a field. I am not sure what I am doing wrong. My CameraSurfaceView is separate from my activity so I'm wondering if the display has something to do with it? Hope this is explained correctly, if you need more code or anything let me know. I appreciate this in advance!

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();
}
도움이 되었습니까?

해결책

Since you have a field named Surface, you cannot access the class Surface from within your class.

Instead, you will have to write

android.view.Surface.ROTATION_0

or rename your field.

다른 팁

You've named your field Surface, which is also the name of the type you are trying to reference a constant from. Rename the field so that it does not have the same name as the type, then import android.view.Surface and you should be able to reference Surface.ROTATION_0 etc with no problems.

Note that Java style usually dictates you start variable names with lower case, and types with upper case, which avoids this type of conflict.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top