1

カメラアプリを修正しようとしています。カメラを横向きモードにすると、画面が横向きにプレビューされます。私はスタックでこの修正を見つけました:Android-カメラのプレビューは横向きです

私のCameraSurfaceViewクラスコンストラクターでは、次のようなサーフェスを取得しthis.Surface = getHolder();ます。このsurfaceChanged方法では、Surface.ROTATION _ <#>に対して0、90、180、および270度のディスプレイの回転を確認します(以下の方法)。ただし、ROTATIONSurface定数のそれぞれには、次のエラーで下線が引かれています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();
}
4

2 に答える 2

1

という名前のフィールドがあるためSurface、クラス内からクラスにアクセスすることはできませんSurface

代わりに、あなたは書く必要があります

android.view.Surface.ROTATION_0

または、フィールドの名前を変更します。

于 2013-03-01T02:47:15.037 に答える
0

フィールドSurfaceに名前を付けました。これは、定数を参照しようとしているタイプの名前でもあります。タイプと同じ名前にならないようにフィールドの名前を変更してからインポートandroid.view.Surfaceすると、問題なく参照できるようになりますSurface.ROTATION_0

Javaスタイルでは通常、変数名を小文字で開始し、型を大文字で開始するように指示されます。これにより、このタイプの競合が回避されます。

于 2013-03-01T02:47:48.060 に答える