课程/Android/移动开发
Android摄像头基础
-
-
xzhang76
2018-02-01
- 只有一个关闭摄像头的操作可以参考
-
截图
0赞 · 0采集
-
-
每天提高一点
2017-05-31
- 预览相机内容
-
截图
0赞 · 0采集
-
-
Lgin
2017-05-25
- 9)在onResume()中调用setStartPreview完成绑定
@Override
protected void onResume() {
super.onResume();
if (mCamera == null){
mCamera = getCamera();
if(mHolder != null){
setStartPreview(mCamera, mHolder);
}
}
}
10)在releaseCamera()方法中,也需要释放SurfaceHolder资源
/**
* 释放相机所占用的资源
* */
private void releaseCamera(){
if(mCamera != null){
mCamera.setPreviewCallback(null); //将相机回调置空,取消surfaceview和camera的关联
mCamera.stopPreview(); //取消相机的取景功能
mCamera.release(); //释放相机占用资源
mCamera = null;
}
}
11)实现SurfaceHolder的三个方法
@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera, mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}
-
截图
0赞 · 0采集
-
-
慕先生0560154
2016-11-16
- 接四
9)在onResume()中调用setStartPreview完成绑定
@Override
protected void onResume() {
super.onResume();
if (mCamera == null){
mCamera = getCamera();
if(mHolder != null){
setStartPreview(mCamera, mHolder);
}
}
}
10)在releaseCamera()方法中,也需要释放SurfaceHolder资源
/**
* 释放相机所占用的资源
* */
private void releaseCamera(){
if(mCamera != null){
mCamera.setPreviewCallback(null); //将相机回调置空,取消surfaceview和camera的关联
mCamera.stopPreview(); //取消相机的取景功能
mCamera.release(); //释放相机占用资源
mCamera = null;
}
}
11)实现SurfaceHolder的三个方法
@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera, mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}
-
1赞 · 1采集
-
-
慕先生0560154
2016-11-16
- 接 四、4)
5)获取camera对象
public Camera getCamera(){
Camera camera = Camera.open();
return camera;
}
6)释放相机资源
private void releaseCamera(){
mCamera.release();
}
7)将Camera与Activity的生命周期绑定
Activity onPause的时候,释放camera资源
Activity onResume的时候,初始化camera对象
8)下一步将camera和界面的显示进行绑定,即让界面上可以实时显示预览效果,并最终完成拍照功能
private SurfaceView mPreview; //显示相机取景图片
使用SurfaceView,需要implements SurfaceHolder.Callback方法,并重写其中的三个方法;
使用SurfaceView之前,还需要创建SurfaceHolder对象:
SurfaceHolder mHolder = mPreview.getHolder();
mHolder.addCallback(this);
//将camera对象和surfaceView绑定,让界面上可以实时显示预览效果
private void setStartPreview(Camera camera, SurfaceHolder holder){
camera.setPreviewDisplay(holder);//完成绑定
camera.setDisplayOrientation(90); //将系统camera预览角度进行调整
camera.startPreview();//在surfaceview中去预览camera中的图像
}
注意:系统默认camera是横屏的,所以预览图像也是横屏,因此我们需要增加一个方法,让整个camera能够竖过来
camera.setDisplayOrientation(90); //将camera旋转90度,从横屏变成竖屏
-
0赞 · 1采集
-
-
慕先生0560154
2016-11-16
- 四、自定义Camera
Camera使用注意事项:
1)相机使用结束后要及时释放其占用的资源,将camera和activity的生命周期绑定
2)Camera所在包是android.hardware.Camera;Camera2是更高级的Camera
3)增加自定义Camera类,CustomCamera extends Activity
4)布局:一个button,点击时进行拍照
一个SurfaceView,显示相机取景图片
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Capture"
android:onClick="startCapture"/>
<SurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/sv_preview"/>
</LinearLayout>
-
0赞 · 1采集
-
-
qq_慕姐5109078
2016-03-29
- 释放资源
-
截图
0赞 · 1采集
-
-
qq_叚装_0
2016-02-26
- surfaceview的三个方法
-
截图
0赞 · 0采集
-
-
qq_叚装_0
2016-02-26
- 释放相机资源
-
截图
0赞 · 0采集
-
-
qq_叚装_0
2016-02-26
- 将camera的操作与activity的生命周期进行绑定
-
截图
0赞 · 0采集