Android轻松集成Camera拍照

1.最近有在做Camera拍照相关的项目,从一开始到现在看了好多资料,将Camera封装了一下,现在分享出来。

Github库代码链接

compile ‘com.march.cameralibs:easycameralibs:1.0.8’

更新日志

1.0.7 三星手机推出后台返回崩溃

1.0.8 小米手机红米note2机型适配

2.简单介绍

2.1 不需要再去关注如何使用camera类和设置相关参数,提供简单的API接口

2.2 支持UI和Camera参数同步切换,不需要在外部修改UI,更便捷

2.3 使用Camera和SurfaceView

2.4 自支持触摸定点对焦和自动对焦

2.5 支持连拍和正常拍摄单张照片

2.6 异步存储照片,内存优化

2.7 适配6.0及大多数机型,支持图片横屏拍摄自动旋转

3.功能介绍

3.1 切换闪光灯

3.2 切换拍照模式,连拍模式像素略低,可调节

3.3 切换照片大小,支持3:4,1:1

3.4 图片本地存储

3.5 横屏图片自动旋转

3.6 镜头切换

4.update log

4.1 init

4.2 自定义控件CamContainerView内置定点对焦和UI切换

5.基本API使用说明

在xml文件中使用

//参数说明<declare-styleable name="CamContainerView">        <attr name="isShowTop" format="boolean"/>//是否在顶部显示遮挡</declare-styleable>//xml实例 <com.march.libs.mycamera.CamContainerView        android:id="@+id/activity_mycamera_container"        android:layout_width="match_parent"        android:layout_height="match_parent"        cam:isShowTop="true"/>

创建Activity同步生命周期

    @Override    protected void onResume() {        super.onResume();        CameraNative.getInst().onResume();    }    @Override    protected void onPause() {        super.onPause();        CameraNative.getInst().onPause();        CameraNative.getInst().onPause();    }    @Override    protected void onDestroy() {        super.onDestroy();        CameraNative.getInst().onDestory();    }   

获取CameraNative实例并设置监听

//get the singleton of CameraNativeprivate CameraNative mCameraNative;mCameraNative = CameraNative.getInst();//设置保存图片的路径mCameraNative.setSaveDir(new File(ImageUtils.getSystemDcimPath()));//设置闪光灯监听,有三个回调可以自由实现mCameraNative.setOnFlashChangeListener(new CameraNative.OnFlashChangeListener() {            @Override            public boolean OnTurnFlashOn() {            //your code                   return true;            }});//设置照片拍摄的监听的监听,将会实现三个方法mCameraNative.setOnSavePicListener(this);@Overridepublic void InSaveProgress(int num, float percent) {        L.info("正在存储 " + num + " rate " + percent);        //由于拍摄和存储是异步进行的,在这里可以回调保存的进度}@Overridepublic void OnSaveOver() {        L.info("保存完成");        //保存完成,回调发生}@Overridepublic void CanotTake() {        ToastUtil.show("稍候操作");        //camera拍摄过快时将会产生异常,会回调改方法}//错误回调监听mCameraNative.setOnErrorListener(new CameraNative.OnErrorListener() {            @Override            public void error(String errMsg) {            //错误信息,默认错误信息仍旧是会打印的            }        });

闪光灯API

//切换闪光灯//如果相机支持将会切换到自动状态,否则直接切换到关闭状态,是可以自适应的切换模式,需要设置按钮和相关资源//flashBtn ImageView 切换按钮 可以为空,为空时不切换//res int[] 资源数组,长度必须是3,可以为空,为空时不切换public void toogleLightWithAuto(ImageView flashBtn, int... res)mCameraNative.toogleLightWithAuto(flashBtn,                R.mipmap.camera_flashon,                 R.mipmap.camera_flashauto,                  R.mipmap.camera_flashoff);//开启和关闭状态切换//flashBtn ImageView 切换按钮 可以为空,为空时不切换//res int[] 资源数组,长度必须是2,可以为空,为空时不切换public void toogleLight(ImageView flashBtn, int... res) mCameraNative.toogleLight(flashBtn,                    R.mipmap.camera_flashon,                         R.mipmap.camera_flashoff);

照片大小API

//自动切换图片资源同时切换图片大小//size参数 为CameraNative.NotConvert时将会自己切换否则切换到制定状态(CameraNative.NotConvert,CameraNative.One2One,CameraNative.Four2Three)public void switchPicSize(int size, ImageView iv, int... res) //无关资源切换参数同上public void switchPicSize(int size)public boolean isSizeOne2One() public boolean isFour2Three()

照片模式API

//切换照片模式,两种模式//MODE_PIC 照片模式,像素在300w以上 //MODE_GIF 连拍模式,相片像素600*800//切换拍照模式,同时重新初始化相机public void switchTakeMode(int mode)public boolean isTakePic()public boolean isTakeGif()

拍照API

//拍摄照片//fileName 指定文件名存储,不能为空//接口public static abstract class OnTakePicListener {//拍摄获得的二进制数组        public void onTakePic(byte[] data) {        }//处理之后的bitmap        public void onTakePic(Bitmap bit) {        }//是否处理成bitmap,默认不处理        public boolean isConvert2Bitmap() {            return false;        }//压缩的sampleSize,默认不压缩        public int getInSampleSize(byte[] data) {            return 1;        }}public boolean doTakePic(String fileName, boolean isConvert2Bit, OnTakePicListener listener)//快速连拍//开始连拍时调用doStartTakeFastPic()public void doStartTakeFastPic()//拍摄一张,fileName == null时不存储,使用listener获取拍摄的数据public void doTakeFastPic(String fileName, OnTakePicListener listener)//拍摄完毕停止连拍public void doStopFastPic() 

图片处理API

//在外部处理byte数组,返回bitmappublic Bitmap handlePicData(boolean isFast, byte[] data, int sampleSize)

其他

//由于存储照片是异步的,拍摄完毕之后需要调用doTakePicOver()方法,并在OnSaveOver()回调中执行相关操作doTakePicOver()//停止照片自定旋转,横屏拍摄的照片将不会自动横向显示public void shutDownAutoRotate() 

常用操作

public void clickBtn(View view) {        switch (view.getId()) {            case R.id.activity_mycamera_take:                    //拍照                cameraNative.doTakePic(str(System.currentTimeMillis()) + ".jpg", null);                break;            case R.id.activity_mycamera_switch:                    //切换摄像头                cameraNative.switchCamera();                break;            case R.id.activity_mycamera_flash:            //切换闪光灯                cameraNative.toogleLightWithAuto(null);                break;            case R.id.activity_mycamera_over:            //拍照结束                cameraNative.takePicOver();                break;            case R.id.activity_mycamera_mode:            //切换拍摄模式                cameraNative.switchTakeMode(CameraNative.NotConvert);                break;            case  R.id.activity_mycamera_size:            //切换照片大小                cameraNative.switchPicSize(CameraNative.NotConvert);                break;        }    }

更多相关文章

  1. Android(安卓)Hook Java
  2. Appium的一点一滴:Appium 和Android真机
  3. [Android实例] Handler+ExecutorService(线程池)+MessageQueue模
  4. Android(安卓)判断是开发debug模式,还是发布release模式
  5. 通过Camera进行拍照
  6. Android(安卓)webview 播放视频无法播放以及可以播放预览图为加
  7. 《Android开发技术周报》笔记
  8. My Android(安卓)Camera Notes
  9. Android(安卓)N新特性

随机推荐

  1. android 禁止横屏时输入法全屏
  2. android 使用xml定义自己的View
  3. android 页面布局时定义控件ID时@id/XX和
  4. Android Application Fundamentals——An
  5. Android中字体的处理
  6. Android Studio 配置快捷方式生成JNI头文
  7. android配置文件详解
  8. Android的BUG(四) - Android(安卓)app的卡
  9. Android数据的四种存储方式
  10. Android so减包相关