我在哪里放置setCameraDisplayOrientaion方法?

时间:2014-12-21 00:31:35

标签: java android

我正在试图弄清楚如何在我的应用程序中设置相机的显示方向,我是java编码和android的新手所以我试图找出我需要放置setCameraDisplayOrientation()方法的位置以及需要在括号内传递的正确标志,任何帮助都会很棒.setCameraDisplayOrientation的方法是片段底部的最后一个方法

谢谢你!

 
import android.app.Activity; 
import android.content.Context; 
import android.hardware.Camera; 
import android.view.Surface; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import com.ericsson.ejorsha.fsomobileapp.activities.CameraActivity; 
 
import com.ericsson.ejorsha.fsomobileapp.MainActivity; 
 
import java.util.List; 
 
 
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback 
{ 
    private SurfaceHolder surfaceHolder = null; 
    private Camera camera = null; 
    int width = 720; 
    int height = 1280; 
 
    @SuppressWarnings("deprecation") 
    public CameraPreview(Context context) 
    { 
        super(context); 
 
        surfaceHolder = this.getHolder(); 
        surfaceHolder.addCallback(this); 
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
 
    } 
 
    /* 
     * (non-Javadoc) 
     * @see android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder) 
     */ 
    @Override 
    public void surfaceCreated(SurfaceHolder holder) 
    { 
        camera = Camera.open(); 
 
        setCameraDisplayOrientation(CameraActivity.this, 0, camera); 
 
 
        // Show the Camera display 
        try 
        { 
 
            camera.setPreviewDisplay(holder); 
 
 
        } 
        catch (Exception e) 
        { 
            this.releaseCamera(); 
        } 
 
    } 
 
    /* 
     * (non-Javadoc) 
     * @see android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder, int, int, int) 
     */ 
    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
    { 
 
        // Start the preview for surfaceChanged 
        if (camera != null) 
        { 
            camera.startPreview(); 
 
 
        } 
    } 
 
    /* 
     * (non-Javadoc) 
     * @see android.view.SurfaceHolder.Callback#surfaceDestroyed(android.view.SurfaceHolder) 
     */ 
    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) 
    { 
        // Do not hold the camera during surfaceDestroyed - view should be gone 
        this.releaseCamera(); 
    } 
 
    /** 
     * Important HotFix for Google Glass (post-XE11) update 
     * @param camera Object 
     */ 
    public void setCameraParameters(Camera camera) 
    { 
        if (camera != null) 
        { 
            Camera.Parameters parameters = camera.getParameters(); 
            List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); 
 
            // You need to choose the most appropriate previewSize for your app 
            Camera.Size previewSize = camera.new Size(width, height); 
 
            parameters.setPreviewSize(previewSize.width, previewSize.height); 
            camera.setParameters(parameters); 
            camera.startPreview(); 
        } 
    } 
 
    /** 
     * Release the camera from use 
     */ 
    public void releaseCamera() 
    { 
        if (camera != null) 
        { 
            camera.release(); 
            camera = null; 
        } 
    } 
    public static void setCameraDisplayOrientation(Activity activity, 
                                                   int cameraId, android.hardware.Camera camera) { 
        android.hardware.Camera.CameraInfo info = 
                new android.hardware.Camera.CameraInfo(); 
        android.hardware.Camera.getCameraInfo(cameraId, info); 
        int rotation = activity.getWindowManager().getDefaultDisplay() 
                .getRotation(); 
        int degrees = 0; 
        switch (rotation) { 
            case Surface.ROTATION_0: 
                degrees = 0; 
                break; 
            case Surface.ROTATION_90: 
                degrees = 90; 
                break; 
            case Surface.ROTATION_180: 
                degrees = 180; 
                break; 
            case Surface.ROTATION_270: 
                degrees = 270; 
                break; 
        } 
 
        int result; 
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
            result = (info.orientation + degrees) % 360; 
            result = (360 - result) % 360;  // compensate the mirror 
        } else {  // back-facing 
            result = (info.orientation - degrees + 360) % 360; 
        } 
        camera.setDisplayOrientation(result); 
 
    } 
} 

0 个答案:

没有答案