亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android zxing 4.7.1橫屏改豎屏 screenOrientation landscape to portrait

發布時間:2020-05-15 13:59:36 來源:網絡 閱讀:5184 作者:mmqzlj 欄目:移動開發

項目中需要用到條碼掃描功能,花了小半天時間才把zxing整合到項目中。以下說下整合的經驗:

1)從github上下載zxing-master 項目,項目中主要有3個模塊android、android-core、core,其中android-core,core是android模塊依賴的library module. android模塊的最新版本號為4.7.1,android-core和core的版本號為3.1.1.

2) 我用的ide是android studio,使用gradle進行項目管理。首先在項目中導入android模塊,命名為zxing,在build.gradle中加入依賴

    dependencies {

        compile 'com.google.zxing:android-core:3.1.0'

        compile 'com.google.zxing:core:3.1.0'

    }

注:

由于gradle中3.1.1版本號編譯時說找不到,只好用3.1.0版本。

3)運行zxing模塊,可以在真機上快速跑起來,掃描功能也很正常。現在主要的任務就是把代碼進行精簡,把里面不需要的資源文件及java文件刪除,最后確保掃描功能還能正常使用就可以了。基本上保留根目錄下的幾個文件和camera整個目錄的內容就差不多了,什么history,share,wifi之類的統統都用不著。還有res下的大部分內容也需要清理,activity只保留CaptureActivity就夠了,把capture.xml中不需要的布局內容也可以刪除掉。

4)把zing模塊改為library類型,在現有的application的build.gradle中加入依賴關系就可以了,在androidManifest中加入CaptureActivity,然后調用試試。結果發現zxing模塊中的部分方法沒有定義為public,訪問不到,改完這個問題后又發現會有常量錯,據說library項目在studio中編譯是R資源文件的內容不會加final導致。解決了之后,程序能運行了,但是本來有的掃描框卻不見了,詭異啊!無奈,最后只好把zxing模塊內容直接拷貝到當前跑的模塊中。最后一切運行正常。

5) 由于我的項目是豎屏操作的,而zxing是橫屏的,為這個事情折騰了很久,在stackoverflow上搜到的答案大多都是適合老版本的操作,幾乎找不到針對最新版4.7.1的。花了大半天的時間最后終于解決了。以下是解決的步驟。

    5.1)AndroidManifest中CaptureActivity的screenOrientation屬性改為portrait

    5.2)CaptureActivity中把onResume方法中的

//    if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {

//      setRequestedOrientation(getCurrentOrientation());

//    } else {

//      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);

//    }

這段注釋掉,在onCreate方法的最后添加:

      if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {

          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

      } else {

          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

      }

     5.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;

    5.4)CameraConfigurationManager的setDesiredCameraParameters方法的camera.setParameters(parameters);之前添加:

                 camera.setDisplayOrientation(90);

   5.5)DecodeHandler的private void decode(byte[] data, int width, int height) 方法中PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height);注釋掉,改為:

      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;

      width = height;

      height = tmp;

      PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);


好了,現在豎屏掃描可以正常使用了,大功告成。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚东县| 临城县| 读书| 怀集县| 全南县| 永修县| 莫力| 睢宁县| 兴文县| 黔西| 竹北市| 溧阳市| 开封县| 兰西县| 庆城县| 始兴县| 七台河市| 嘉峪关市| 洪洞县| 长海县| 吉隆县| 惠水县| 深州市| 砀山县| 阜南县| 临江市| 乡宁县| 平阳县| 宜兰县| 巴东县| 安化县| 东阿县| 吴桥县| 浪卡子县| 米泉市| 仪陇县| 雷山县| 九江市| 静安区| 乌鲁木齐市| 涿州市|