Я хочу использовать JavaCameraView для своего проекта, но не могу решить, когда хочу сделать кнопку для переключения камеры с помощью JavaCameraView
, как перейти с камеры по умолчанию в Android на javaCamera, когда я хочу использоватькнопка переключения камеры
Это мой XML Activity
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
tools:context=".CentreActivity">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|top"
android:layout_marginBottom="150dp">
<org.opencv.android.JavaCameraView
android:id="@+id/camera_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
opencv:camera_id="any"
opencv:show_fps="true" />
<Button
android:id="@+id/camera_flip"
android:layout_width="80dp"
android:layout_height="80dp"
android:background="@drawable/kamera"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_gravity="bottom|center"
android:background="@color/colorPrimaryDark">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello!"
android:id="@+id/tv_text"
android:textSize="18pt"
android:layout_centerInParent="true"
android:textColor="@android:color/white">
</TextView>
</RelativeLayout>
</FrameLayout>
И это мой Activity.java
package com.example.englishlearning;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.JavaCameraView;
import org.opencv.core.Mat;
public class CentreActivity extends Activity implements CameraBridgeViewBase.CvCameraViewListener2 {
private Camera mCamera;
private ViewActivity mPreview;
private Button switchCamera;
JavaCameraView cameraPreview;
private boolean cameraFront = false;
private Context myContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
myContext = this;
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
cameraPreview = (JavaCameraView) findViewById(R.id.camera_view);
mPreview = new ViewActivity(myContext, mCamera);
cameraPreview.setVisibility(SurfaceView.VISIBLE);
cameraPreview.setCvCameraViewListener(this);
switchCamera = (Button) findViewById(R.id.camera_flip);
switchCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//get the number of cameras
int camerasNumber = Camera.getNumberOfCameras();
if (camerasNumber > 1) {
//release the old camera instance
//switch camera, from the front and the back and vice versa
releaseCamera();
chooseCamera();
} else {
}
}
});
mCamera.startPreview();
}
private int findFrontFacingCamera() {
int cameraId = -1;
// Search for the front facing camera
int numberOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numberOfCameras; i++) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
cameraId = i;
cameraFront = true;
break;
}
}
return cameraId;
}
private int findBackFacingCamera() {
int cameraId = -1;
//Search for the back facing camera
//get the number of cameras
int numberOfCameras = Camera.getNumberOfCameras();
//for every camera check
for (int i = 0; i < numberOfCameras; i++) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
cameraId = i;
cameraFront = false;
break;
}
}
return cameraId;
}
public void onResume() {
super.onResume();
if(mCamera == null) {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
mPreview.refreshCamera(mCamera);
Log.d("nu", "null");
}else {
Log.d("nu","no null");
}
}
public void chooseCamera() {
//if the camera preview is the front
if (cameraFront) {
int cameraId = findBackFacingCamera();
if (cameraId >= 0) {
//open the backFacingCamera
//set a picture callback
//refresh the preview
mCamera = Camera.open(cameraId);
mCamera.setDisplayOrientation(90);
mPreview.refreshCamera(mCamera);
}
} else {
int cameraId = findFrontFacingCamera();
if (cameraId >= 0) {
//open the backFacingCamera
//set a picture callback
//refresh the preview
mCamera = Camera.open(cameraId);
mCamera.setDisplayOrientation(90);
mPreview.refreshCamera(mCamera);
}
}
}
@Override
protected void onPause() {
super.onPause();
//when on Pause, release camera in order to be used from other applications
releaseCamera();
}
private void releaseCamera() {
// stop and release camera
if (mCamera != null) {
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mCamera.release();
mCamera = null;
}
}
@Override
public void onCameraViewStarted(int width, int height) {
}
@Override
public void onCameraViewStopped() {
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
return null;
}
}
помогите мне исправить мой код