自定义SurfaceView,模拟相机:CameraSurfacePreview.java
package cn.nanochap.face.activity.check;

import java.io.IOException;

import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.PictureCallback;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CameraSurfacePreview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mHolder;
    private Camera mCamera;
    private int cameraId;
    private Context context;
    private int i;//

    public CameraSurfacePreview(Context context,int cameraId,int i) {
        super(context);
        this.context=context;
        this.cameraId=cameraId;
        this.i=i;
        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        mHolder = getHolder();
        mHolder.addCallback(this);
        // deprecated setting, but required on Android versions prior to 3.0
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
            
            Log.d("Dennis", "surfaceCreated() is called");
            
        try {
                        // Open the Camera in preview mode
                        mCamera = Camera.open(cameraId);
                        mCamera.setPreviewDisplay(holder);
                        Camera.Parameters parameters = mCamera.getParameters();           
                parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);//
                mCamera.setParameters(parameters);
               
                // Ļ ת Ƕȵ ͷ Ƕ
                int degrees = getDisplayOritation(getDispalyRotation(i), cameraId);
                mCamera.setDisplayOrientation(degrees);
        } catch (IOException e) {
            Log.d("Dennis", "Error setting camera preview: " + e.getMessage());
        }
    }
   
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
            
            Log.d("Dennis", "surfaceChanged() is called");
            
        try {
            mCamera.startPreview();

        } catch (Exception e){
            Log.d("Dennis", "Error starting camera preview: " + e.getMessage());
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
            if (mCamera != null) {
                    mCamera.stopPreview();
                mCamera.release();
                mCamera = null;
            }
            
            Log.d("Dennis", "surfaceDestroyed() is called");
    }
   
    public void takePicture(PictureCallback imageCallback) {
            //
                mCamera.takePicture(null, null, imageCallback);
               
        }
   
    private int getDisplayOritation(int degrees, int cameraId) {
        Camera.CameraInfo info = new Camera.CameraInfo();
        Camera.getCameraInfo(cameraId, info);
        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;
        } else {
            result = (info.orientation - degrees + 360) % 360;
        }
        return result;
    }
   
    private int getDispalyRotation(int i) {
        switch (i) {
        case Surface.ROTATION_0:
            return 0;
        case Surface.ROTATION_90:
            return 90;
        case Surface.ROTATION_180:
            return 180;
        case Surface.ROTATION_270:
            return 270;
        }
        return 0;
    }
   
}
收藏
1 条回帖
LV.12017-9-7 17:59
看不到但是还是要谢谢捉着的分享   
需要登陆后才可进行回复 登录

返回顶部
现在加入我们,注册一个账号 账号登陆 QQ账号登陆 微博账号登陆

微信扫一扫,马上找工作

在线客服