一、activity_main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><SurfaceViewandroid:id="@+id/surface_view"android:layout_width="353dp"android:layout_height="621dp"android:layout_marginStart="24dp"android:layout_marginTop="24dp"android:layout_marginEnd="24dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/buttonOpen"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:layout_marginBottom="16dp"android:text="打开摄像头"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/surface_view" /><Buttonandroid:id="@+id/button5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="24dp"android:layout_marginTop="16dp"android:layout_marginEnd="24dp"android:layout_marginBottom="16dp"android:text="Button"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/buttonOpen"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/surface_view" /><Buttonandroid:id="@+id/button6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="24dp"android:layout_marginTop="16dp"android:layout_marginEnd="24dp"android:layout_marginBottom="16dp"android:text="Button"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/buttonOpen"app:layout_constraintTop_toBottomOf="@+id/surface_view" /></androidx.constraintlayout.widget.ConstraintLayout>
二、AndroidManifest.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-feature android:name="android.hardware.camera"/><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.FourthApp"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-dataandroid:name="android.app.lib_name"android:value="" /></activity></application></manifest>
三、MainActivity.java代码:
public class MainActivity extends AppCompatActivity {private Camera fCamera;private boolean isPreview = false;private SurfaceView surfaceView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);surfaceView=findViewById(R.id.surface_view);//surfaceView.setVisibility(View.INVISIBLE);if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {requestPermissions(new String[]{Manifest.permission.CAMERA}, 11);}}surfaceView.getLayoutParams().width=720;surfaceView.getLayoutParams().height=720;SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.surface_view);SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);mSurfaceHolder.addCallback(mSurfaceCallback);}private SurfaceHolder.Callback mSurfaceCallback = new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {try {fCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);fCamera.setPreviewDisplay(surfaceHolder);fCamera.startPreview();isPreview = true;} catch (IOException e) {Log.e("boy", e.toString());}}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {if(fCamera != null){if(isPreview){fCamera.stopPreview();fCamera.release();}}}};}
四、运行效果: