启动相机
启动前的准备
使用相机前先确认在 AndroidMenifest.xml
文件中加入了如下权限声明:
<!-- 请求访问使用照相设备 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 开启闪光灯权限 --> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-feature android:name="android.hardware.camera.flash" />
同时也要检测设备是否支持相机,使用以下代码检测:
// 如果不支持摄像头显示警告信息 if (CameraHelper.showAlertIfNotSupportCamera(activity)) return;
其中 activity
参数是程序所在的上下文 Context 对象。
获取相机控制器对象
首先获取 TuCameraOption 的对象,如下:
TuCameraOption option = new TuCameraOption();
然后对 option
进行属性配置,比如保存到相册、启用滤镜功能等。
然后使用配置好了的 option
获取相机控制器 TuCameraFragment 的对象,并对其设置委托代理,如下:
TuCameraFragment fragment = option.fragment(); fragment.setDelegate(this);
fragment.setDelegate(this)
是对相机设置委托,该代码所在的类需要实现接口 TuCameraFragmentDelegate,并实现该接口下的三个抽象方法,分别是:
// 获取一个拍摄结果 void onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result); // 获取一个拍摄结果 (异步方法) boolean onTuCameraFragmentCapturedAsync(TuCameraFragment fragment, TuSdkResult result); // 请求从相机界面跳转到相册界面 void onTuAlbumDemand(TuCameraFragment fragment);
当拍照结束时,程序会自动调用 onTuCameraFragmentCaptured()
方法,可以在此方法中取得拍照结果。
当设置 option.setDisplayAlbumPoster(true);
时,相机左下角会显示相册入口,当点击该入口的时候程序会自动调用 onTuAlbumDemand()
方法,需要自己在该方法中实现跳转到相册的处理逻辑。
启动相机
当取得相机控制器对象之后,可以使用以下方式启动相机并全屏显示:
TuSdkHelperComponent componentHelper = new TuSdkHelperComponent(activity); componentHelper.presentModalNavigationActivity(fragment, true);
常见属性设置
通过对 TuCameraOption 类属性的指定可以方便的对相机各个属性进行配置。
指定控制器类型
option.setComponentClazz(TuCameraFragment.class);
当需要继承 TuCameraFragment 类以重写相机的某些属性或功能的时候,需要将子类作为该方法的参数,这样打开相机时就会调用子类中重写的方法。
指定根视图布局资源ID
option.setRootViewLayoutId(TuCameraFragment.getLayoutId());
当需要给相机界面指定一个新的界面的时候使用该方法,将新的界面的布局资源 ID 放到该方法参数中。
设置保存到临时文件
保存到临时文件 (默认不保存, 当设置为 true 时, TuSdkResult.imageFile, 处理完成后将自动清理原始图片)
option.setSaveToTemp(true);
设置保存到系统相册
保存到系统相册 (默认不保存, 当设置为 true 时, TuSdkResult.sqlInfo, 处理完成后将自动清理原始图片)
option.setSaveToAlbum(true);
设置保存到的相册名称
option.setSaveToAlbumName("TuSdk");
显示相册入口 (默认不显示)
option.setDisplayAlbumPoster(false);
在多功能相册组件中,进入相机时,才会打开该选项。点击相册入口,可以在相册和相机之间跳转。 如果用户在单独使用相机时打开了该选项,需要自己处理点击相册的事件。
设置拍摄后自动释放相机
拍摄后自动释放相机,节省手机内存, 需要手动再次启动
option.setAutoReleaseAfterCaptured(false);
设置照片输出压缩率
默认为90,设置范围是 0-100,如果设置为0,将保存为 PNG 格式
option.setOutputCompress(90);
设置视频视图显示比例
默认为0,全屏显示
option.setCameraViewRatio(1f);
设置相机方向
默认为 CameraInfo.CAMERA_FACING_BACK
option.setAvPostion(CameraInfo.CAMERA_FACING_BACK);
设置照片输出图片长宽
默认为全屏
option.setOutputSize(new TuSdkSize(1440, 1920));
设置闪光灯模式
option.setDefaultFlashMode(Camera.Parameters.FLASH_MODE_OFF);
设置是否开启滤镜支持
默认为关闭
option.setEnableFilters(true);
是否默认显示滤镜视图
默认不显示, 如果已经设置了setEnableFilters(false), 那么setShowFilterDefault()将失效
option.setShowFilterDefault(true);
设置滤镜组行视图宽度 (单位:DP)
option.setGroupFilterCellWidthDP(60);
设置滤镜组选择栏高度 (单位:DP)
option.setFilterBarHeightDP(80);
设置滤镜分组列表行视图布局资源ID
默认资源 ID 为 tusdk_impl_component_widget_group_filter_group_view
,如需自定义请继承自 GroupFilterGroupView
option.setGroupTableCellLayoutId(GroupFilterGroupView.getLayoutId());
设置滤镜列表行视图布局资源ID
默认资源 ID 为 tusdk_impl_component_widget_group_filter_item_view
,如需自定义请继承自 GroupFilterItemView
option.setFilterTableCellLayoutId(GroupFilterItemView.getLayoutId());
设置需要显示的滤镜名称列表
滤镜名称参考 TuSDK.bundle/others/lsq_tusdk_configs.json
filterGroups[]->filters[]->name lsq_filter_%{Brilliant}
如果名称列表为空将显示所有滤镜
String[] filters = { "SkinNature", "SkinPink", "SkinJelly", "SkinNoir", "SkinRuddy", "SkinPowder", "SkinSugar" }; option.setFilterGroup(Arrays.asList(filters));
设置是否保存最后一次使用的滤镜
option.setSaveLastFilter(true);
设置滤镜组自动选择默认滤镜
option.setAutoSelectGroupDefaultFilter(true);
开启用户滤镜历史记录
option.setEnableFiltersHistory(true);
开启在线滤镜
option.setEnableOnlineFilter(true);
设置是否显示滤镜标题视图
option.setDisplayFiltersSubtitles(true);
设置触摸聚焦视图ID
默认视图 ID 为 tusdk_impl_component_camera_focus_touch_view.xml
option.setFocusTouchViewId(TuFocusTouchView.getLayoutId());
设置是否直接输出图片数据
默认为 false,输出已经处理好的图片 Bitmap
option.setOutputImageData(false);
设置是否禁用持续自动对焦
option.setDisableContinueFoucs(true);
禁用系统拍照声音
option.setDisableCaptureSound(true);
自定义拍照声音RAW ID
option.setCaptureSoundRawId(R.raw.lsq_camera_focus_beep);
开启长按拍摄
option.setEnableLongTouchCapture(true);
禁用聚焦声音
option.setDisableFocusBeep(true);
是否需要统一配置参数
默认false, 取消三星默认降噪,锐化
option.setUnifiedParameters(false);
设置预览视图实时缩放比例
默认为0.7f, 实时预览时,缩小到全屏大小比例,提升预览效率, 0 < mPreviewEffectScale <= 1
option.setPreviewEffectScale(0.7f);
视频覆盖区域颜色
默认为0xFF000000
option.setRegionViewColor(0xFF000000);
禁用前置摄像头自动水平镜像
默认为false,前置摄像头拍摄结果自动进行水平镜像
option.setDisableMirrorFrontFacing(true);
获取拍摄图片
TuSDK 提供了三种不同的方式获得拍摄图片:
获取图片的 Bitmap 对象,此方式将不保存图片
获取图片的存储路径,此方式会将图片保存在相册中
将图片保存在临时文件中,并获取临时文件
获取图片的 Bitmap 对象
需要设置 TuCameraOption 类的下面几个属性:
TuCameraOption option = new TuCameraOption(); // 是否保存到相册 option.setSaveToAlbum(false); // 是否保存到临时文件 option.setSaveToTemp(false);
该方式将不会保存拍照结果,如需保存须在获得图片之后自行处理。
随后可以在 onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result)
方法中使用 result.image
获取图片的 Bitmap 对象。
获取图片的存储路径
需要设置 TuCameraOption 类的下面几个属性:
TuCameraOption option = new TuCameraOption(); // 是否保存到相册 option.setSaveToAlbum(true); // 是否保存到临时文件 option.setSaveToTemp(false);
该方式会将拍摄结果保存在相册中,同时也可以通过设置
option.setSaveToAlbumName("Camera")
将图片保存到名称为 Camera 的相册中。
随后可以在 onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result)
方法中使用 result.imageSqlInfo.path
获取照片的路径。
同时,此方法还可以获取到拍摄结果的其他属性,比如拍摄时间、文件长宽等,具体可以参看 ImageSqlInfo 类的API。
获取图片所在的临时文件
需要设置 TuCameraOption 类的下面几个属性:
TuCameraOption option = new TuCameraOption(); // 是否保存到相册 option.setSaveToAlbum(false); // 是否保存到临时文件 option.setSaveToTemp(true);
该方式将会把拍摄结果保存在临时文件中,在处理完成之后将会清理原始图片。
随后可以在 onTuCameraFragmentCaptured(TuCameraFragment fragment, TuSdkResult result)
方法中使用 result.imageFile
获取临时文件。