首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Surface类Surface.ROTATION_无法解析或不是字段

Android Surface类Surface.ROTATION_无法解析或不是字段
EN

Stack Overflow用户
提问于 2013-03-01 10:43:38
回答 2查看 1.6K关注 0票数 1

我在试着修复我的相机应用。当我在横向模式下握住相机时,它在屏幕上横向预览。我在堆栈上找到了这个修复:Android - Camera preview is sideways

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

代码语言:javascript
复制
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();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 10:47:15

因为您有一个名为Surface的字段,所以不能从您的类中访问类Surface

相反,您将不得不编写

代码语言:javascript
复制
android.view.Surface.ROTATION_0

或重命名您的字段。

票数 1
EN

Stack Overflow用户

发布于 2013-03-01 10:47:48

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

请注意,Java风格通常要求变量名以小写开头,类型以大写开头,这避免了这种类型的冲突。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15149587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档