Класс 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();
}

2 ответа

Решение

Так как у вас есть поле с именем Surface, вы не можете получить доступ к классу Surface из вашего класса.

Вместо этого вам придется написать

android.view.Surface.ROTATION_0

или переименуйте свое поле.

Вы назвали свое поле Surface, который также является именем типа, с которого вы пытаетесь сослаться на константу. Переименуйте поле, чтобы оно не имело того же имени, что и тип, затем импортируйте android.view.Surface и вы должны быть в состоянии ссылаться Surface.ROTATION_0 и т.д. без проблем.

Обратите внимание, что стиль Java обычно требует, чтобы имена переменных начинались со строчных букв, а типы - с прописных, что позволяет избежать конфликтов этого типа.

Другие вопросы по тегам