Zxing 竖屏切换  Android

在google上下载的ZxingDemo 为横屏状态  

我简单的在Androidmanifest.xml把Activity换成竖屏android:screenOrientation="portrait"

屏幕虽然正了 但是屏幕上显示的拍摄画面还是横着的 

查了一些网上的资料   结合自己手工调试 

在这里总结分享一下

 

步骤:

1)   在AndroidManifest.xml中把  标签  CaptureActivity 的screenOrientation修改为

[java]  view plain  copy  
  1. android:screenOrientation="portrait"  


2)  在CameraManager.java类中的getFramingRectInPreview()替换掉原先的 left right top bottom

[java]  view plain  copy  
  1. //竖屏  
  2. rect.left = rect.left * cameraResolution.y / screenResolution.x;   
  3. rect.right = rect.right * cameraResolution.y / screenResolution.x;   
  4. rect.top = rect.top * cameraResolution.x / screenResolution.y;   
  5. rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;   


3)  在CameraConfigurationManager.java中void setDesiredCameraParameters(Camera camera)方法

在setParameters之前增加

[java]  view plain  copy  
  1. camera.setDisplayOrientation(90);  


4)  在DecodeHandler.java中的 decode(byte[] data, int width, int height)方法在

PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height);

之前添加:

[java]  view plain  copy  
  1. byte[] rotatedData = new byte[data.length];   
  2.  for (int y = 0; y < height; y++) {   
  3.  for (int x = 0; x < width; x++)   
  4.  rotatedData[x * height + height - y - 1] = data[x + y * width];   
  5.  }   
  6.  int tmp = width; // Here we are swapping, that's the difference to #11   
  7.  width = height;   
  8.  height = tmp;   
  9.  data = rotatedData;  


5)  将CameraConfigurationManager的  initFromCameraParameters(Camera camera)方法整个替换如下

该方法防止竖屏后屏幕拉伸

 

[java]  view plain  copy  
  1. /** 
  2.  * Reads, one time, values from the camera that are needed by the app. 
  3.  */  
  4. void initFromCameraParameters(Camera camera) {  
  5.     Camera.Parameters parameters = camera.getParameters();  
  6.     previewFormat = parameters.getPreviewFormat();  
  7.     previewFormatString = parameters.get("preview-format");  
  8.     Log.d(TAG, "Default preview format: " + previewFormat + '/'  
  9.             + previewFormatString);  
  10.     WindowManager manager = (WindowManager) context  
  11.             .getSystemService(Context.WINDOW_SERVICE);  
  12.     Display display = manager.getDefaultDisplay();  
  13.     screenResolution = new Point(display.getWidth(), display.getHeight());  
  14.     Log.d(TAG, "Screen resolution: " + screenResolution);  
  15.       
  16.     Point screenResolutionForCamera = new Point();     
  17.     screenResolutionForCamera.x = screenResolution.x;     
  18.     screenResolutionForCamera.y = screenResolution.y;     
  19.       
  20.     // preview size is always something like 480*320, other 320*480  
  21.     if (screenResolution.x < screenResolution.y) {    
  22.          screenResolutionForCamera.x = screenResolution.y;    
  23.          screenResolutionForCamera.y = screenResolution.x;  
  24.     }  
  25.       
  26.     cameraResolution = getCameraResolution(parameters, screenResolutionForCamera); 
  27.     Log.d(TAG, "Camera resolution: " + screenResolution);  
  28. }  

更多相关文章

  1. React Native项目编译通不过, 出现 The "android" command is dep
  2. Android(安卓)View框架总结(一)
  3. Android(安卓)5 消息机制源码分析
  4. android 关于Location of the Android(安卓)SDK has not been se
  5. Android(安卓)ScrollView初始位置不在顶部的解决方法
  6. android service
  7. Android(安卓)获取进程名称(可以区分内部进程)
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. MySQL如何优化索引
  2. mysql 的indexof函数用法说明
  3. MySQL 实现lastInfdexOf的功能案例
  4. 深入了解Mysql逻辑架构
  5. MySQL null的一些易错点
  6. MySQL SHOW STATUS语句的使用
  7. MySQL查询缓存的小知识
  8. Mysql技术内幕之InnoDB锁的深入讲解
  9. MySQL 主从同步,事务回滚的实现原理
  10. MySQL 有关MHA搭建与切换的几个错误log汇