美文网首页Camera
Google封装类CameraView的使用

Google封装类CameraView的使用

作者: 你饿不饿呀 | 来源:发表于2018-09-21 19:18 被阅读794次

    前言

    对于拍照功能来说,Android 由于版本不同可以使用不同的书写方式,光API就有Camera和Camera2两套,其余的区别还有

    API Level Camera API Preview View
    9-13 Camera1 SurfaceView
    14-20 Camera1 TextureView
    21-23 Camera2 TextureView
    24及以上 Camera2 SurfaceView

    虽然Android能够向下兼容,但是谁不想使用更新的API和技术,另一方面,Camera API调用起来也不方便,所以对Camera调用的封装势在必行。

    github上面有一些,但是使用时经常出现兼容性,适配等问题,直到发现了Google自己封装的CameraView,地址:
    https://github.com/google/cameraview

    导入

    这里Google没有上传到仓库,所以我们需要自己导入。

    首先去Github页面下载源代码


    image.png

    把下载的文件里的解压出来,随便放到什么位置


    image.png

    然后进入Android Studio 选择 Import Module


    image.png

    选择你刚才解压出来的library(这里我已经改名为cameraView)


    image.png

    接下来可能会提示错误,需要修改library的build.gradle


    image.png

    配置文件的sdkversion为你的sdkversion,还有一些test相关的可以删除。

    之后再编译一次就可以使用了。

    使用

    直接上代码,没什么难点。

    public class CameraActivity extends SwipeBackActivity {
    
        @BindView(R.id.camera_cameraView)
        CameraView cameraView;
        @BindView(R.id.camera_flash)
        ImageView imageView;
    
    
        @OnClick({R.id.camera_album,R.id.camera_flash,R.id.camera_paizhao})
        void onClick(View view){
            switch(view.getId()){
                case R.id.camera_album:{
                    //打开相册选择图片
                    ImageUtil.openMatisse(this);
                    break;
                }
                case R.id.camera_flash:{
                    int stats = cameraView.getFlash();
                    if(stats == CameraView.FLASH_TORCH) {//关闭闪光灯
                        cameraView.setFlash(CameraView.FLASH_OFF);
                        imageView.setImageResource(R.mipmap.flash);
                    }
                    else {//开启闪光灯
                        cameraView.setFlash(CameraView.FLASH_TORCH);
                        imageView.setImageResource(R.mipmap.flash_on);
                    }
                    break;
                }
                case R.id.camera_paizhao:{
                    cameraView.takePicture();//拍照
                    break;
                }
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            BarUtils.setStatusBarAlpha(this);
            setContentView(R.layout.activity_camera);
            ButterKnife.bind(this);
            cameraView.addCallback(new CameraView.Callback() {
                @Override
                public void onCameraOpened(CameraView cameraView) {
                    super.onCameraOpened(cameraView);
                    cameraView.setAspectRatio(AspectRatio.of(1920,1080));//设置图片尺寸
                    cameraView.setAutoFocus(true);//自动对焦
                }
    
                @Override
                public void onCameraClosed(CameraView cameraView) {
                    super.onCameraClosed(cameraView);
                }
    
                @Override
                public void onPictureTaken(CameraView cameraView, byte[] data) {//在这里保存拍到的图片
                    super.onPictureTaken(cameraView, data);
                    String filePath = Util.getWrongFile()+"/"+new Date().getTime()+".jpg";
                    boolean isSuccess = FileIOUtils.writeFileFromBytesByStream(filePath,data);
                    if(isSuccess){
                        setResult(1,new Intent().putExtra("data",filePath));
                    }else {
                        setResult(0);
                    }
                    finish();
                }
            });
        }
    
    
        @Override
        protected void onResume() {
            super.onResume();
            cameraView.start();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            cameraView.stop();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            cameraView.stop();
        }
    }
    

    相关文章

      网友评论

        本文标题:Google封装类CameraView的使用

        本文链接:https://www.haomeiwen.com/subject/nsfwnftx.html