当前时间:Friday 2016年12月09日 欢迎访问 夜阑小雨 我的学习碎片档案,这里记录了我的学习内容和工作中经验,希望给您带去帮助。

当前位置: 首页 >> Android开发,phonegap开发 >> 正文

phonegap-cordova-二维码扫描横屏改竖屏

修改ZXing For Android 为竖屏模式,经过实践,可行方法如下:

1、修改AndroidManifest文件,将CaptureActivity设为portrait:
  代码为:android:configChanges=”orientation|keyboardHidden”
          android:screenOrientation=”portrait”

2、把摄像头预览景调为竖向,具体如下:
1)在CameraConfigurationManager类里的setDesiredCameraParameters(Camera camera)方法里添加如下代 码:
//摄像头旋转90度
setDisplayOrientation(camera, 90);
2)然后在CameraConfigurationManager类里面添加setDisplayOrientation(Camera camera, int angle)方法,方法具体代码如下:

   protected void setDisplayOrientation(Camera camera, int angle) {

       Method downPolymorphic;       

        try { 
            
            downPolymorphic = camera.getClass().getMethod(“setDisplayOrientation”, new Class[] { int.class });
      
            if (downPolymorphic != null)
                
                downPolymorphic.invoke(camera, new Object[] { angle });       
      
        } catch (Exception e1) {   
            e1.printStackTrace();
             

  
3)最后,为了防止摄像头竖过来后图像拉伸的问题,需要在CameraConfigurationManager类中的initFromCameraParameters(Camera camera)方法的Log.d(TAG, “Screen resolution: ” + screenResolution);语句后面添加如下代码:
//解决竖屏后图像拉伸问题
   Point screenResolutionForCamera = new Point();   
   screenResolutionForCamera.x = screenResolution.x;   
   screenResolutionForCamera.y = screenResolution.y;   
   // preview size is always something like 480*320, other 320*480
   if (screenResolution.x < screenResolution.y) {  
        screenResolutionForCamera.x = screenResolution.y;  
        screenResolutionForCamera.y = screenResolution.x;
   }
cameraResolution = getCameraResolution(parameters, screenResolutionForCamera);
3、把CameraManager类中getFramingRectInPreview()方法中的代码做如下修改:
将://横屏模式
     rect.left = rect.left * cameraResolution.x / screenResolution.x;
     rect.right = rect.right * cameraResolution.x / screenResolution.x;
     rect.top = rect.top * cameraResolution.y / screenResolution.y;
     rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;
替换为:
    //竖屏模式
     rect.left = rect.left * cameraResolution.y / screenResolution.x;     
     rect.right = rect.right * cameraResolution.y / screenResolution.x;     
     rect.top = rect.top * cameraResolution.x / screenResolution.y;     
     rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
4、在DecodeHandler类中的decode(byte[] data, int width, int height)方法中,在buildLuminanceSource调用前添加如下代码:
//竖屏
   byte[] rotatedData = new byte[data.length];
   for (int y = 0; y < height; y++) {
       for (int x = 0; x < width; x++)
       rotatedData[x * height + height – y – 1] = data[x + y * width];
   }
   int tmp = width; // Here we are swapping, that’s the difference to #11
   width = height;
   height = tmp;
data = rotatedData;
至此,运行程序,竖屏模式完成。

 

评论信息

0 条评论 Comments and Pings closed

评论被关闭。

网站客户端下载