我只想在textureView中显示相机预览.

在纵向模式下它看起来很好但在横向模式下它顺时针旋转90度.

我知道这样的事情可以解决这个问题:

private static final SparseIntArray ORIENTATIONS = new SparseIntArray();

static {

ORIENTATIONS.append(Surface.ROTATION_0, 90);

ORIENTATIONS.append(Surface.ROTATION_90, 0);

ORIENTATIONS.append(Surface.ROTATION_180, 270);

ORIENTATIONS.append(Surface.ROTATION_270, 180);

}

我不知道在哪里打电话.你有什么建议吗?

这是我的代码:

private TextureView textureView;

private static final String TAG = "AndroidCameraApi";

private String cameraId;

protected CameraDevice cameraDevice;

protected CameraCaptureSession cameraCaptureSessions;

protected CaptureRequest captureRequest;

private static final int REQUEST_CAMERA_PERMISSION = 200;

private Size imageDimension;

protected CaptureRequest.Builder captureRequestBuilder;

private Handler mBackgroundHandler;

private HandlerThread mBackgroundThread;

private ImageReader imageReader;

private static final SparseIntArray ORIENTATIONS = new SparseIntArray();

static {

ORIENTATIONS.append(Surface.ROTATION_0, 90);

ORIENTATIONS.append(Surface.ROTATION_90, 0);

ORIENTATIONS.append(Surface.ROTATION_180, 270);

ORIENTATIONS.append(Surface.ROTATION_270, 180);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_photo);

textureView = (TextureView) findViewById(R.id.texturePhoto);

assert textureView != null;

textureView.setSurfaceTextureListener(textureListener);

}

TextureView.SurfaceTextureListener textureListener = new TextureView.SurfaceTextureListener() {

@Override

public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {

//open your camera here

openCamera();

}

@Override

public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

// Transform you image captured size according to the surface width and height

}

@Override

public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {

return false;

}

@Override

public void onSurfaceTextureUpdated(SurfaceTexture surface) {

}

};

private void openCamera() {

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);

Log.e(TAG, "is camera open");

try {

cameraId = manager.getCameraIdList()[0];

CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);

StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);

assert map != null;

imageDimension = map.getOutputSizes(SurfaceTexture.class)[0];

// Add permission for camera and let user grant the permission

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(PhotoActivty.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CAMERA_PERMISSION);

return;

}

manager.openCamera(cameraId, stateCallback, null);

} catch (CameraAccessException e) {

e.printStackTrace();

}

Log.e(TAG, "openCamera X");

}

private final CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {

@Override

public void onOpened(CameraDevice camera) {

//This is called when the camera is open

Log.e(TAG, "onOpened");

cameraDevice = camera;

createCameraPreview();

}

@Override

public void onDisconnected(CameraDevice camera) {

cameraDevice.close();

}

@Override

public void onError(CameraDevice camera, int error) {

cameraDevice.close();

cameraDevice = null;

}

};

protected void createCameraPreview() {

try {

SurfaceTexture texture = textureView.getSurfaceTexture();

assert texture != null;

texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());

Surface surface = new Surface(texture);

captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

captureRequestBuilder.addTarget(surface);

cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback(){

@Override

public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {

//The camera is already closed

if (null == cameraDevice) {

return;

}

// When the session is ready, we start displaying the preview.

cameraCaptureSessions = cameraCaptureSession;

updatePreview();

}

@Override

public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {

Toast.makeText(PhotoActivty.this, "Configuration change", Toast.LENGTH_SHORT).show();

}

}, null);

} catch (CameraAccessException e) {

e.printStackTrace();

}

}

protected void updatePreview() {

if(null == cameraDevice) {

Log.e(TAG, "updatePreview error, return");

}

captureRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);

try {

cameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler);

} catch (CameraAccessException e) {

e.printStackTrace();

}

}

private void closeCamera() {

if (null != cameraDevice) {

cameraDevice.close();

cameraDevice = null;

}

if (null != imageReader) {

imageReader.close();

imageReader = null;

}

}

android camera2预览方向,Android camera2预览无法在横向模式下正常工作相关推荐

  1. android camera2预览方向,Android Camera2预览偶尔会旋转90度(示例代码)

    我正在使用Android的Camera2 API开发一些应用程序.到目前为止,我已经能够在TextureView中显示预览.该应用程序默认为横向模式.使用模拟器时,预览将显示为颠倒.在我的物理Nexu ...

  2. android百度地图标方向,Android百度地图之方向感应和模式更改

    本文实例为大家分享了Android百度地图之方向感应和模式更改,供大家参考,具体内容如下 目标效果: 菜单中设置几种模式,点击可查看不同的地图形式,这里随便截几张图. 1.首先要去百度地图网站 htt ...

  3. android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

    android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...

  4. android传感器获取运动方向,Android开发者指南-运动传感器Motion Sensor[原创译文]...

    Android 平台支持很多监测设备运动的传感器.其中有两个传感器一定是基于硬件的(加速度计和陀螺仪),有三个可能基于硬件或软件(重力计.线性加速计和旋转向量传感器). 比如,某些设备的软传感器利用加 ...

  5. android拍照保存照片方向,android 拍照的照片方向问题,读取图片EXIF信息

    Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件 ...

  6. android 获取屏幕旋转方向,android获取手机屏幕尺寸和旋转方向

    布局文件main.xml: android:layout_width="fill_parent" android:layout_height="fill_parent&q ...

  7. android paint设置字体方向,Android paint的drawText() 的正确使用方式

    本帖最后由 文晶 于 2016-8-31 12:35 编辑 前段时间在做打印测试,一般打印都是发送字膜,但是非常麻烦,需要去计算字膜,然后又封装成打印机需要的格式,总之,两个字:麻烦!后来在我苦苦计算 ...

  8. Android获取view焦点方向,android 中获取当前焦点所在屏幕中的位置 view.getLocationOnScreen(location)...

    final int[] location = new int[2]; view.getLocationOnScreen(location); final int[] location = new in ...

  9. android 阿拉伯语文字方向,android – 如何将RTL文本(阿拉伯语)绘制到位图并正确排序?...

    我正在尝试将阿拉伯文字绘制到位图上以供显示: Bitmap img = Bitmap.createBitmap( (int) f+100, 300, Config.RGB_565); Canvas c ...

最新文章

  1. 面试官:说一下线程池内部工作原理?
  2. saltstack中salt-key收集的主机名与实际主机名不一致
  3. 流言终结者——C语言内存管理
  4. C++学习之路 | PTA乙级—— 1050 螺旋矩阵 (25 分)(精简)
  5. mysql查字段的备注_Mysql 查看表注释或字段注释
  6. 数据库异常---ORA-01436: 用户数据中的 CONNECT BY loop in user data 循环
  7. 如何查看IIS的80端口被占用?
  8. 硬盘安装android
  9. 已知地球上某两个点的坐标(即经纬度),求两点的实际距离。uniapp实现(实现语法js)
  10. Linux下载离线安装包
  11. latex模板中 引入ORCID链接的方法
  12. python 等值面_ANSYS Fluent快速添加等值面/等值线 源代码-教育代码类资源
  13. python的ols_看懂python3 之statsmodels包的OLS
  14. execl筛选去重_excel表格如何去除重复数据进行筛选
  15. 陀螺年度巨献 | 2020年度区块链产业发展报告
  16. [论文阅读] (15)英文SCI论文审稿意见及应对策略学习笔记总结(letpub爬虫)
  17. WordCount程序详解
  18. 大一上学期学习生活情况总结
  19. html5 获取页面的宽和高
  20. 达梦DM7_dmdbchk使用

热门文章

  1. 源码分析 Mybatis 的 foreach 为什么会出现性能问题
  2. Mysql的key_len计算方法
  3. 前端每日实战:33# 视频演示如何用纯 CSS 创作牛奶文字变换效果
  4. 万能险被保监会叫停 安全投资理财大旗它将接手
  5. Nginx 限制单个IP的并发连接数及对每个连接速度(限速)
  6. Javascript之旅——第十站:为什么都说闭包难理解呢?
  7. Windows Server 2012 NIC Teaming
  8. linux中搭建java开发环境
  9. 30天敏捷生活(7):生成行动计划
  10. Skara 是研究JDK源代码的工具