camerax_demo
声明:资源链接索引至第三方,平台不作任何存储,仅提供信息检索服务,若有版权问题,请https://help.coders100.com提交工单反馈
首先,我们需要创建一个名为CameraXDemo的Java类,并在其中实现基本的拍照、录像和切换前后镜头功能。以下是详细的步骤:
1. 在AndroidManifest.xml文件中添加相机权限:
2. 在build.gradle文件中添加相机依赖:
3. 创建一个名为CameraXDemo的Java类:
4. 创建一个RecorderThread类,用于录制视频:
```java
import android.content.Context;
import android.graphics.Bitmap;
import android.media.MediaRecorder;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileDescriptor;
import java.io.BufferedInputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
简易的camerax安卓相机,依照官网kotlin用例,转为java语法,实现了基本的拍照、录像、切换前后镜头功能
1. 在AndroidManifest.xml文件中添加相机权限:
2. 在build.gradle文件中添加相机依赖:
dependencies {
implementation 'androidx.camera:camera:1.0.0'
}
3. 创建一个名为CameraXDemo的Java类:
import android.content.Context;
import android.hardware.Camera;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CameraXDemo {
private static final String TAG = "CameraXDemo";
private SurfaceView mPreview;
private Camera mCamera;
private Camera.PictureCallback mPictureTaken;
private Camera.Parameters mPreviewSize;
private String mOutputImagePath;
private String mVideoPath;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
public CameraXDemo(Context context) {
mPreview = new SurfaceView(context);
init();
}
private void init() {
mCamera = CameraFactory.getInstance().openCamera();
try {
mPreviewSize = mCamera.getParameters();
mPreviewSize.setPreviewSize(640, 480);
mCamera.setDisplayOrientation(90);
mCamera.setParameters(mPreviewSize);
mCamera.startPreview();
} catch (Exception e) {
Log.e(TAG, "Error opening camera", e);
}
}
public void takePicture() throws IOException {
if (mPreview != null && mPictureTaken == null) {
mPictureTaken = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try {
savePicture(data);
} catch (Exception e) {
e.printStackTrace();
}
}
};
mCamera.takePicture(null, mPictureTaken, mPictureTaken);
} else {
Log.e(TAG, "PictureCallback not set");
}
}
public void savePicture(byte[] data) {
String timeStamp = sdf.format(new Date());
String picturePath = getPicturePath(timeStamp);
try {
FileOutputStream outputStream = new FileOutputStream(picturePath);
outputStream.write(data);
outputStream.close();
Toast.makeText(mPreview.getContext(), "图片保存成功", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
public String getPicturePath(String timeStamp) {
String path = Environment.getExternalStorageDirectory().toString() + "/CameraXDemo/" + timeStamp + ".jpg";
return path;
}
public void switchCamera() {
if (mCamera != null) {
mCamera.release();
mCamera = null;
} else {
try {
mCamera = CameraFactory.getInstance().openCamera();
mCamera.setDisplayOrientation(90);
mCamera.setParameters(mPreviewSize);
mCamera.startPreview();
} catch (Exception e) {
Log.e(TAG, "Error switching camera", e);
}
}
}
public void startRecording() {
if (mCamera != null && mVideoPath != null) {
try {
mCamera.stopPreview();
mCamera.takePicture(null, mPictureTaken, mPictureTaken);
mVideoPath = Environment.getExternalStorageDirectory().toString() + "/CameraXDemo/" + sdf.format(new Date()) + ".mp4";
new RecorderThread(mVideoPath).start();
} catch (Exception e) {
Log.e(TAG, "Error recording", e);
}
} else {
Log.e(TAG, "No camera or video path set");
}
}
}
4. 创建一个RecorderThread类,用于录制视频:
```java
import android.content.Context;
import android.graphics.Bitmap;
import android.media.MediaRecorder;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileDescriptor;
import java.io.BufferedInputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
简易的camerax安卓相机,依照官网kotlin用例,转为java语法,实现了基本的拍照、录像、切换前后镜头功能
-
ICAuto_v1
- 2025-07-27 14:16:29访问
- 积分:1
-
Login
- 2025-07-27 14:16:08访问
- 积分:1
-
hbase-blog
- 2025-07-27 14:11:44访问
- 积分:1
-
BigData
- 2025-07-27 14:11:19访问
- 积分:1
-
XposedToolsRepository
- 2025-07-27 13:42:53访问
- 积分:1
-
ML_Platform
- 2025-07-27 13:36:04访问
- 积分:1
-
ActivitiSourceCode
- 2025-07-27 13:24:32访问
- 积分:1
-
Dota2DataService
- 2025-07-27 13:23:10访问
- 积分:1
-
city-pedestrian-ai-backend
- 2025-07-27 12:25:07访问
- 积分:1
-
C_compiler
- 2025-07-27 12:20:00访问
- 积分:1
-
MyGradleApplication
- 2025-07-27 12:11:57访问
- 积分:1
-
MultiProductsApplication
- 2025-07-27 12:11:25访问
- 积分:1
-
SpringCloudDemo
- 2025-07-27 11:51:37访问
- 积分:1
-
messaging
- 2025-07-27 11:51:02访问
- 积分:1
-
CordovaPluginUHF
- 2025-07-27 11:43:30访问
- 积分:1
-
UHFOldR2000
- 2025-07-27 11:43:00访问
- 积分:1
-
P3Poo7_ElCalamot_minigame
- 2025-07-27 11:12:15访问
- 积分:1
-
CodyFly
- 2025-07-27 10:44:59访问
- 积分:1
-
ContactDemo
- 2025-07-27 10:07:06访问
- 积分:1
-
cordova-plugin-base64-image-photo
- 2025-07-27 10:02:15访问
- 积分:1
-
ssm108
- 2025-07-27 09:51:29访问
- 积分:1
访问申明(访问视为同意此申明)
2.部分网络用户分享TXT文件内容为网盘地址有可能会失效(此类多为视频教程,如发生失效情况【联系客服】自助退回)
3.请多看看评论和内容介绍大数据情况下资源并不能保证每一条都是完美的资源
4.是否访问均为用户自主行为,本站只提供搜索服务不提供技术支持,感谢您的支持