Android放大镜相机可拍照demo

在Android开发中,有时我们需要实现一个放大镜效果的相机,可以实时显示被放大的画面,并能够拍照保存。下面我们来演示如何实现一个这样的demo。

实现步骤

  1. 首先,我们需要在AndroidManifest.xml文件中添加相应的权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 接着,在layout文件中定义一个布局,包含一个SurfaceView用于相机预览和一个ImageButton用于拍照:
<RelativeLayout xmlns:android="
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageButton
        android:id="@+id/btnCapture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_camera"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>
  1. 接着,在Activity中实现相机的预览和拍照功能:
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{
    
    private Camera mCamera;
    private SurfaceView mSurfaceView;
    private ImageButton mBtnCapture;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mSurfaceView = findViewById(R.id.surfaceView);
        mBtnCapture = findViewById(R.id.btnCapture);
        
        mSurfaceView.getHolder().addCallback(this);
        mBtnCapture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCamera.takePicture(null, null, mPictureCallback);
            }
        });
    }
    
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();
        try {
            mCamera.setPreviewDisplay(holder);
            mCamera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        mCamera.stopPreview();
        mCamera.startPreview();
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mCamera.release();
    }

    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            // 保存照片到SD卡
            File pictureFile = new File(Environment.getExternalStorageDirectory() + "/image.jpg");
            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    
}

测试运行

在Android设备上运行该demo,即可看到相机预览功能和拍照保存功能的实现。

甘特图

gantt
    title Android放大镜相机可拍照demo甘特图
    section 添加权限
    添加权限:done, 2022-01-01, 1d
    section 定义布局
    定义布局:done, after 添加权限, 1d
    section 实现功能
    实现功能:done, after 定义布局, 2d
    section 测试运行
    测试运行:done, after 实现功能, 1d

通过以上步骤,我们成功实现了一个Android放大镜相机可拍照的demo。希望本文对你有所帮助!