编写Android拍照界面需要以下几个步骤:
1. 创建一个布局文件(activity_camera.xml),包含一个SurfaceView和一个拍照按钮:
```
android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="match_parent" />
```
2. 创建一个CameraActivity类,实现拍照逻辑:
```java
public class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback, Camera.PictureCallback {
private Camera mCamera;
private SurfaceView mSurfaceView;
private Button mCaptureButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
mSurfaceView = findViewById(R.id.surface_view);
mSurfaceView.getHolder().addCallback(this);
mCaptureButton = findViewById(R.id.btn_capture);
mCaptureButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mCamera != null) {
mCamera.takePicture(null, null, CameraActivity.this);
}
}
});
}
@Override
protected void onResume() {
super.onResume();
if (mCamera == null) {
mCamera = Camera.open();
}
}
@Override
protected void onPause() {
super.onPause();
releaseCamera();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 实现自动对焦
mCamera.autoFocus(null);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 处理拍照结果
// 将data转化为Bitmap或保存为文件等
// ...
// 继续预览
mCamera.startPreview();
}
private void releaseCamera() {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
}
```
3. 在AndroidManifest.xml中添加Camera权限:
```xml
```
4. 在AndroidManifest.xml中将CameraActivity设置为启动页:
```xml
android:name=".CameraActivity" android:label="Camera" >
```
5. 运行程序,即可在拍照界面进行拍照操作。