android studio点击按钮,打开相机,代码该怎么写
时间: 2023-07-31 09:10:34 浏览: 182
你可以使用Android系统提供的Camera API来实现打开相机并拍照的功能。以下是实现此功能的基本步骤:
1. 添加相机权限到AndroidManifest.xml文件中:
```xml
<uses-permission android:name="android.permission.CAMERA" />
```
2. 在布局文件中添加一个Button按钮,用于触发打开相机的操作:
```xml
<Button
android:id="@+id/btn_open_camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Camera" />
```
3. 在Activity中初始化相机对象并设置预览界面:
```java
public class MainActivity extends AppCompatActivity {
// 相机对象
private Camera mCamera;
// 预览界面
private CameraPreview mPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取Camera对象
mCamera = getCameraInstance();
// 创建预览界面
mPreview = new CameraPreview(this, mCamera);
FrameLayout previewLayout = (FrameLayout) findViewById(R.id.camera_preview);
previewLayout.addView(mPreview);
}
// 获取Camera对象
private Camera getCameraInstance() {
Camera c = null;
try {
c = Camera.open();
} catch (Exception e) {
// 打开相机失败
}
return c;
}
}
```
4. 创建预览界面的类CameraPreview,并实现SurfaceHolder.Callback接口:
```java
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
// 添加SurfaceHolder.Callback接口
mHolder = getHolder();
mHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 在Surface创建时开启相机预览
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
// 捕获异常
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 在Surface改变时调整相机预览的大小
if (mHolder.getSurface() == null) {
return;
}
try {
mCamera.stopPreview();
} catch (Exception e) {
// 捕获异常
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e) {
// 捕获异常
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 在Surface销毁时释放相机资源
mCamera.release();
}
}
```
5. 在Activity中添加打开相机的按钮点击事件:
```java
public class MainActivity extends AppCompatActivity {
// 相机对象
private Camera mCamera;
// 预览界面
private CameraPreview mPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取Camera对象
mCamera = getCameraInstance();
// 创建预览界面
mPreview = new CameraPreview(this, mCamera);
FrameLayout previewLayout = (FrameLayout) findViewById(R.id.camera_preview);
previewLayout.addView(mPreview);
// 添加打开相机的按钮点击事件
Button btnOpenCamera = (Button) findViewById(R.id.btn_open_camera);
btnOpenCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture(null, null, mPicture);
}
});
}
// 获取Camera对象
private Camera getCameraInstance() {
Camera c = null;
try {
c = Camera.open();
} catch (Exception e) {
// 打开相机失败
}
return c;
}
// 拍照回调函数
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 处理拍照后的照片
}
};
}
```
在上面的代码中,我们在打开相机的按钮点击事件中调用了mCamera.takePicture()方法来拍照,并传入了一个PictureCallback对象mPicture用于处理拍照后的照片。你可以在mPicture的onPictureTaken()方法中实现对拍照后的照片的处理。
阅读全文