<dl id="xvpj2"></dl>
  • <bdo id="xvpj2"></bdo>
      <center id="xvpj2"><acronym id="xvpj2"></acronym></center>

      <center id="xvpj2"><label id="xvpj2"></label></center>

      天天躁人人躁人人躁狂躁_一道久在线无码加勒比_日本一卡二卡不卡视频查询_日本老熟妇50岁丰满

      ?

      服務(wù)熱線:025-86138771/18014487552
      當(dāng)前位置:主頁 > 新聞動態(tài) > > ZXing開發(fā)詳解

      ZXing開發(fā)詳解

      文章出處:研維官網(wǎng)人氣: 發(fā)表時間2019-09-10 09:05:50
      什么是Z*?
      在Android平臺做過二維碼相關(guān)模塊的肯定都熟知ZXing開源項(xiàng)目,Z*是一個開源Java類庫用于解析多種格式的1D/2D條形碼。目標(biāo)是能夠?qū)R編碼、Data Matrix、UPC的1D條形碼進(jìn)行解碼。 其提供了多種平臺下的客戶端包括:J2ME、J2SE和Android。其GitHub地址是:傳送門
       
      Z*項(xiàng)目里面代碼很多,實(shí)現(xiàn)的功能也很多,我們的應(yīng)用只需要剝離其中的掃描模塊即可,再多一點(diǎn)也就是生成二維碼的功能;接下來我們就一起來精簡ZXing項(xiàng)目,終形成一個小的Demo案例,當(dāng)然江湖上已經(jīng)有過N多種版本的ZXing精簡項(xiàng)目,什么橫屏改豎屏,繪制掃描界面,開啟閃光燈等等,并且許多都是基于ZXing2.3.0來做精簡的,后續(xù)有許多更新的版本,包括自動對焦,Camera管理,bug修復(fù)等等新功能;筆者使用的是ZXing3.1.0版本,這里需要說明的就是我的這版Demo絕對是江湖上面還沒有出現(xiàn)的,也算是一點(diǎn)點(diǎn)小小的創(chuàng)新把,那就是去除ZXing項(xiàng)目中惱人的ViewFinderView的繪制,使用XML布局掃描界面,添加掃描動畫,精確計(jì)算掃描區(qū)域
       
      克隆Z*項(xiàng)目到本地
      1
      git clone https://github.com/zxing/zxing.git
      整理ZXing代碼
      打開ZXing項(xiàng)目的文件夾,可以看到如下文件目錄:
       
       
       
      其中我們主要關(guān)注2個文件夾里的內(nèi)容: 
       
      1. core : Z*項(xiàng)目的核心代碼,可以新建一個Java工程,然后export成jar來調(diào)用。如下圖所示:
       
       
       
      免打包即可獲得的zxing-3.1.0.jar  猛戳下載 
       
      2. android : Android示例工程代碼,成功運(yùn)行之后就是一個專業(yè)的掃碼應(yīng)用了。如下圖所示:
       
       
       
      免引入免整理的zxing原始工程 ZXingRawProject  猛戳下載
       
      但是這樣就讓你滿足了,那怎么可以說是極致二維碼掃描呢,有木有感覺ZXing的掃描框的繪制很不爽啊?自定義的View繪制的很丑,多屏幕適配的時候還經(jīng)常不兼容,原始項(xiàng)目還是橫屏模式的,目前大家都習(xí)慣豎屏掃描呢。怎么辦?別怕,我來告訴你,我要將ViewFinderView砍掉,使用xml界面布局,添加掃描動畫,終一樣準(zhǔn)確無誤的掃描到二維碼數(shù)據(jù),只需要對準(zhǔn),是的,毫厘不差的對準(zhǔn)就可以了。
       
      精簡Z*代碼,打造極致掃描
      1. 去掉Z*中一些和掃描無關(guān)的代碼,終留下的代碼結(jié)構(gòu)如下圖所示,關(guān)鍵的是你看不到ViewFinderView 了
       
       
       
      2. 布局掃描界面,xml代碼如下:
       
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      <?xml version="1.0" encoding="utf-8"?> 
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:background="@android:color/transparent" 
          android:orientation="vertical" > 
         
          <SurfaceView 
              android:id="@+id/capture_preview" 
              android:layout_width="match_parent" 
              android:layout_height="match_parent" /> 
         
          <RelativeLayout 
              android:id="@+id/capture_container" 
              android:layout_width="match_parent" 
              android:layout_height="match_parent" > 
         
              <ImageView 
                  android:id="@+id/capture_mask_top" 
                  android:layout_width="match_parent" 
                  android:layout_height="120dp" 
                  android:layout_alignParentTop="true" 
                  android:background="@drawable/shadow" /> 
         
              <RelativeLayout 
                  android:id="@+id/capture_crop_view" 
                  android:layout_width="200dp" 
                  android:layout_height="200dp" 
                  android:layout_below="@id/capture_mask_top" 
                  android:layout_centerHorizontal="true" 
                  android:background="@drawable/qr_code_bg" > 
         
                  <ImageView 
                      android:id="@+id/capture_scan_line" 
                      android:layout_width="match_parent" 
                      android:layout_height="wrap_content" 
                      android:layout_alignParentTop="true" 
                      android:layout_marginBottom="5dp" 
                      android:layout_marginTop="5dp" 
                      android:src="@drawable/scan_line" /> 
              </RelativeLayout> 
         
              <ImageView 
                  android:id="@+id/capture_mask_bottom" 
                  android:layout_width="match_parent" 
                  android:layout_height="wrap_content" 
                  android:layout_alignParentBottom="true" 
                  android:layout_below="@id/capture_crop_view" 
                  android:background="@drawable/shadow" /> 
         
              <ImageView 
                  android:id="@+id/capture_mask_left" 
                  android:layout_width="wrap_content" 
                  android:layout_height="match_parent" 
                  android:layout_above="@id/capture_mask_bottom" 
                  android:layout_alignParentLeft="true" 
                  android:layout_below="@id/capture_mask_top" 
                  android:layout_toLeftOf="@id/capture_crop_view" 
                  android:background="@drawable/shadow" /> 
         
              <ImageView 
                  android:id="@+id/capture_mask_right" 
                  android:layout_width="wrap_content" 
                  android:layout_height="match_parent" 
                  android:layout_above="@id/capture_mask_bottom" 
                  android:layout_alignParentRight="true" 
                  android:layout_below="@id/capture_mask_top" 
                  android:layout_toRightOf="@id/capture_crop_view" 
                  android:background="@drawable/shadow" /> 
          </RelativeLayout> 
         
      </RelativeLayout>
      3. 計(jì)算截取區(qū)域 貼心注解: 如果你沒有看上一篇ZBar掃描中關(guān)于掃描區(qū)域計(jì)算的解釋,那趕緊回去,咱不能急,看完再來接上,否則你會不理解的!傳送門
       
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      private void initCrop() { 
          int cameraWidth = cameraManager.getCameraResolution().y; 
          int cameraHeight = cameraManager.getCameraResolution().x; 
         
          /** 獲取布局中掃描框的位置信息 */ 
          int[] location = new int[2]; 
          scanCropView.getLocationInWindow(location); 
         
          int cropLeft = location[0]; 
          int cropTop = location[1] - getStatusBarHeight(); 
         
          int cropWidth = scanCropView.getWidth(); 
          int cropHeight = scanCropView.getHeight(); 
         
          /** 獲取布局容器的寬高 */ 
          int containerWidth = scanContainer.getWidth(); 
          int containerHeight = scanContainer.getHeight(); 
         
          /** 計(jì)算終截取的矩形的左上角頂點(diǎn)x坐標(biāo) */ 
          int x = cropLeft * cameraWidth / containerWidth; 
          /** 計(jì)算終截取的矩形的左上角頂點(diǎn)y坐標(biāo) */ 
          int y = cropTop * cameraHeight / containerHeight; 
         
          /** 計(jì)算終截取的矩形的寬度 */ 
          int width = cropWidth * cameraWidth / containerWidth; 
          /** 計(jì)算終截取的矩形的高度 */ 
          int height = cropHeight * cameraHeight / containerHeight; 
         
          /** 生成終的截取的矩形 */ 
          mCropRect = new Rect(x, y, width + x, height + y); 
      研維小尺寸手持終端PDA:6寸windows10操作系統(tǒng),支持一維碼、二維碼掃描,IP67加固型工業(yè)手持機(jī),支持底座通訊、藍(lán)牙手柄、電池可拆卸,自帶wifi藍(lán)牙GPS
      此文關(guān)鍵字:此文關(guān)鍵詞:

      相關(guān)資訊

        ?

        南京研維信息微信,掃掃有驚喜哦!

        在線客服
        一道久在线无码加勒比_日本一卡二卡不卡视频查询_日本老熟妇50岁丰满_国产精品 高清 尿 小便 嘘嘘_在线永久看片免费的视频
        <dl id="xvpj2"></dl>
      • <bdo id="xvpj2"></bdo>
          <center id="xvpj2"><acronym id="xvpj2"></acronym></center>

          <center id="xvpj2"><label id="xvpj2"></label></center>