Camera的使用(一)

  本节主要记录在Android中不使用默认的拍照应用,而是自启摄像头,并不断刷新屏幕实现预览的功能。

  AndroidManifest.xml:  

 <activity android:name=".CameraActivity" android:screenOrientation="portrait"/>

  CameraActivity.java:

public class CameraActivity extends Activity implements mBaseUiFragment.OnUiFragmentJumpToListener {

    CameraFragment fragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //请求窗口特性:无标题
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //添加窗口特性:全屏
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera_activity_layout);
        initFragment();
    }

    private void initFragment(){
        if (fragment == null){
            fragment = new CameraFragment();
        }
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.camera_framelayout, fragment, CameraFragment.FRAGMENT_TAG);
        fragmentTransaction.commit();
    }

    @Override
    public void jumpToFragment(Class<? extends Fragment> fragmentClass, String toFragmentTag) {

    }

    @Override
    public void jumpToFragment(Class<? extends Fragment> fragmentClass, String toFragmentTag, Bundle args) {

    }

    @Override
    public void fragmentBack() {

    }
}

  CameraFragment.java:  

public class CameraFragment extends mBaseUiFragment{

    static public String FRAGMENT_TAG = "CameraFragment";

    private final static int REQUEST_DELETE_PHOTO = 1;

    // 相机类
    Camera mCamera;

    //显示界面
    private SurfaceHolder mSurfaceHolder;

    // 前后摄像头的选择
    private int switchCamera = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.camera_layout, null);
        initView();

        return rootView;
    }

    private void initView(){
        SurfaceView mSurfaceView = (SurfaceView) rootView.findViewById(R.id.camera_surfaceView);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(
                new SurfaceHolder.Callback() {
                    @Override
                    public void surfaceCreated(SurfaceHolder holder) {
                        //当SurfaceView的视图层级结构被放到屏幕上时候,连接Camera和Surface
                        try {

                            if (mCamera != null) {
                                mCamera.setPreviewDisplay(holder);
                            }

                        } catch (Exception e) {
                            // TODO: handle exception
                        }
                    }

                    @Override
                    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                        //当Surface首次显示在屏幕上时候,设置好相机参数,开始预览
                        if (mCamera == null) {
                            return;
                        }
                        Camera.Parameters parameters = mCamera.getParameters();
                        Camera.Size s = getBestSupportedSize(parameters.getSupportedPreviewSizes(), width, height);

                        parameters.setPreviewSize(s.width, s.height);

                        parameters.setPictureSize(s.width, s.height);
                        mCamera.setParameters(parameters);
                        mCamera.setDisplayOrientation(270);

                        try {
                            mCamera.startPreview();
                        } catch (Exception e) {
                            // TODO: handle exception
                            mCamera.release();
                            mCamera = null;
                        }
                    }

                    @Override
                    public void surfaceDestroyed(SurfaceHolder holder) {
                        //当视图从屏幕上移除的时候,停止预览
                        if (mCamera != null) {
                            mCamera.stopPreview();
                        }
                    }
                }
        );
    }

    /******************************************]
     *
     * 穷举法找出具有最大数目像素的尺寸
     *
     * @param sizes
     * @param width
     * @param height
     * @return
     */
    public Camera.Size getBestSupportedSize(List<Camera.Size> sizes,int width,int height) {
        Camera.Size bestSize = sizes.get(0);
        int largestArea = bestSize.width*bestSize.height;
        for (Camera.Size s :sizes) {
            int area =s.width*s.height;
            if (area > largestArea) {
                bestSize=s;
                largestArea = area;
            }
        }
        return bestSize;
    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        System.out.println("onPause");
        //程序中止暂停时,释放Camera
        if (mCamera!=null) {
            mCamera.release();
            mCamera=null;
        }

    }

    @SuppressLint("NewApi")
    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        //程序运行时,打开Camera
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            mCamera = Camera.open(switchCamera);
        }else {
            mCamera = Camera.open();
        }

    }

}


Done
时间: 2024-12-07 10:03:12

Camera的使用(一)的相关文章

html5中拍照camera

方法: getCamera: 获取摄像头管理对象 对象: Camera: 摄像头对象 CameraOption: JSON对象,调用摄像头的参数 PopPosition: JSON对象,弹出拍照或摄像界面指示位置 回调方法: CameraSuccessCallback: 调用摄像头操作成功回调 CameraErrorCallback: 摄像头操作失败回调 权限: 功能模块(permissions) { // ... "permissions":{ // ... "Camera

Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段落,又是新一月,上月主要是围绕MediaPlayer相关展开,从今天开始,开始分析多媒体框架中的Camera模块,看下今天的Agenda: Camera拍照 Camera录像 新API android.hardware.camera2 新旧API特点对比 Camera自定义相机 新API andro

Android Camera 拍照 三星BUG总结

Android Camera 三星BUG  : 最近在Android项目中使用拍照功能 , 其它型号的手机运行成功了  唯独在三星的相机上遇到了bug . BUG具体体现为 : (1) 摄像头拍照后图片数据不一定能返回 ;  onActivityResult的data为空 (2) 三星的camera强制切换到横屏  导致Activity重启生命周期 (但是部分机型  配置  android:configChanges  也不能阻止横竖屏切换); 我的解决方法为 如果 activity 的销毁如果

Android Camera探究之路——起步

Android Camera探究之路--起步 Camera在手机中有着举足轻重的地位,无论是二维码还是照片.识别.都离不开摄像头,本文将对Android中的Camera进行全面解析. 权限镇楼: <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE&

[转]Android中直播视频技术探究之---摄像头Camera视频源数据采集解析

http://blog.csdn.net/jiangwei0910410003/article/details/52057543 一.前言 在视频直播中一般都是两种视频数据源,一个是摄像头数据,一个是录制桌面数据,而一般来说美女妹子直播都是来自于摄像头数据,游戏直播都是录制桌面数据的,那么今天就来看看第一个数据源数据采集分析,Android中使用摄像头的场景很多,在没有直播这个行业出现之前,之前用到摄像头的最多就两个场景,一个是二维码扫描,一个是美颜拍照类的应用.那么这里就来看看Android中

腾讯优测-优社区干货精选 |安卓适配之Camera拍照时快门咔嚓声

文/腾讯优测研发工程师 吴宇焕 优测小优有话说: android机型适配的坑自然是不少,不想掉坑快来优测优社区~ 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想关又关不掉.....不过话说回来,静音拍照你想做啥? 来到主题上,因为网络上有很多关于"删除或修改快门声音文件是关闭快门声的方法"的内容,所以我就不赘述了.今天我想和大家说的是:在开发中,针对camera的静音功能我们会遇到哪些机型兼容问题? 从Google官方API中也没有明确的指出关于

树莓派USB摄像头与camera模块对比

I started this thread to let people know that some USB webcams do work with the Raspberry Pi, and in some cases may be a fit for your requirements. The camera board is a great product, and no doubt will get even better as the software matures, but ba

【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)

 概述: 做过Android Camera图像采集和处理的朋友们应该都知道,Android手机相机采集的原始帧(RawFrame)默认是横屏格式的,而官方API有没有提供一个设置Camera采集图像的方向的方法,导致我们拿到原始帧后还需要再次对其进行转换为对应需求的数据,例如YUV的格式,图像的方向等(旋转多少度合适),下面我就粗略的介绍一下大致的流程,理解浅薄,大神请勿喷. 注意:当前还都是基于API<21的内容,如果压根不用android.hardware.Camera的话可能有区别,还没研

RPi 2B python opencv camera demo example

/************************************************************************************** * RPi 2B python opencv camera demo example * 声明: * 本文主要记录RPi 2B 使用python opencv来获取图片的方式. * * 2016-2-24 深圳 南山平山村 曾剑锋 **********************************************

Unreal Engine 4 RenderTarget制作Live Camera效果

Unreal Engine 4 RenderTarget制作Live Camera效果 先上效果: Live Camera我不知道怎么翻译.反正意思就是将一个摄影机的Image渲染到一个2D平面上. 以下介绍下详细的实现方法: 1.创建一个Scene Capture 2D对象 将这个对象拖动到合适的地方. 2.创建RendterTarget对象 材质&贴图->渲染目标 3.设置SceneCapture2D的对象的属性 将SceneCapture:Texture Target设置成上面创建的渲