Android QRコードスキャン-BGAQRCode-Android

5653 ワード

個人ブログ:haichenyi.com.ご注目ありがとうございます
QRコードスキャンをした子供靴はすべて知っていて、Zxingを使いますが、googleが公式に押したZxingは、私たちがスキャンを統合するのが遅いので、直接スキャンできないことがあります.体験が悪いです.彼は多すぎるものに适しているので、私达は1つのスキャン机能だけで、それからネット上で検索して、どのようにzxingスキャンを速くして、zxingの最适化、それからネット上のブログについて、1歩1歩歩いて、最后に终わっても、感じの体験はまだ十分ではありません.QRコードスキャンのオープンソースフレームワークであるBGAQRCode-Androidをお勧めします
QRCodeはQRコードをスキャンし、バーコードをスキャンし、アルバムは画像を取得した後に識別し、Logo付きQRコードを生成し、微博微信、QQ QRコードスキャンスタイルをサポートする.彼はZbarとZxingを最適化して、スキャン速度はとても速くて、ユーザーの体験はとても良くて、使うのもとても便利です
に頼る
implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.2.1'
  
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1'

使用法
Zbarを例にとると(Zxing類似)
ステップ1:XMLファイル


カスタム属性の説明
属性名
説明
デフォルト
qrcv_topOffset
スキャンボックスのtoolbar下部からの距離
90dp
qrcv_cornerSize
スイープボックスの角線の幅
3dp
qrcv_cornerLength
スイープボックスの角線の長さ
20dp
qrcv_cornerColor
スイープボックスのコーナーラインの色
@android:color/white
qrcv_rectWidth
スキャンボックスの幅
200dp
qrcv_barcodeRectHeight
バーコードスイープスタイルの描画枠の高さ
140dp
qrcv_maskColor
スキャンボックスを削除し、残りのシャドウの色
#33FFFFFF
qrcv_scanLineSize
走査線の幅
1dp
qrcv_scanLineColor
スキャンラインの色「スキャンラインとデフォルトのスキャンライン画像の色」
@android:color/white
qrcv_scanLineMargin
走査線の上下または左右の枠の間隔
0dp
qrcv_isShowDefaultScanLineDrawable
デフォルトの画像スキャンラインを表示するかどうか「この属性を設定するとqrcv_scanLineSizeが無効になります.qrcv_scanLineColorでスキャンラインの色を設定して、あなたの会社のUIが単独で特定の色のスキャンライン画像を出すことを避けることができます」
false
qrcv_customScanLineDrawable
スキャンラインの画像リソース「デフォルトのスキャンライン画像スタイルがあなたのニーズを満たすことができない場合に使用します.このプロパティを設定すると、qrcv_i s ShowDefaultScanLineDrawable、qrcv_scanLineSize、qrcv_scanLineColorは無効になります」
null
qrcv_borderSize
スイープボーダーの幅
1dp
qrcv_borderColor
スキャンボーダーの色
@android:color/white
qrcv_animTime
スキャンラインが上部から下部に移動するアニメーション時間(ミリ秒単位)
1000
qrcv_isCenterVertical
スキャンボックスが垂直に中央にあるかどうか、このプロパティがtrueの場合qrcv_は無視されます.topOffsetプロパティ
false
qrcv_toolbarHeight
toolbarの高さ、この属性によってtoolbarによる走査枠の垂直方向のずれを修正する
0dp
qrcv_isBarcode
バーコードをスキャンしているかどうか
false
qrcv_tipText
ヒント文案
null
qrcv_tipTextSize
プロンプトフォントサイズ
14sp
qrcv_tipTextColor
ヒントの色
@android:color/white
qrcv_isTipTextBelowRect
プロンプトファイルがスキャンボックスの下部にあるかどうか
false
qrcv_tipTextMargin
プロンプトファイルとスキャンボックスの間隔
20dp
qrcv_isShowTipTextAsSingleLine
ヒント文案を単行表示するかどうか
false
qrcv_isShowTipBackground
ヒント文案の背景を表示するかどうか
false
qrcv_tipBackgroundColor
提示文案の背景色
#22000000
qrcv_isScanLineReverse
走査線が往復移動するかどうか
true
qrcv_isShowDefaultGridScanLineDrawable
デフォルトのグリッドピクチャスキャン線を表示するかどうか
false
qrcv_customGridScanLineDrawable
スキャンラインのグリッドピクチャリソース
null
qrcv_isOnlyDecodeScanBoxArea
スキャンボックス領域のQRコードのみを認識するかどうか
false
ステップ2:コントロールを取得し、QRCodeViewを実現する.Delegateインタフェース
QRCodeView mQRCodeView = (ZBarView) findViewById(R.id.zbarview);
mQRCodeView.setDelegate(this);


@Override
  public void onScanQRCodeSuccess(String result) {
    vibrate();
    Toast.makeText(this,result,Toast.LENGTH_SHORT).show();
    mQRCodeView.startSpot();
  }

  @Override
  public void onScanQRCodeOpenCameraError() {
    Toast.makeText(this,"  ",Toast.LENGTH_SHORT).show();
  }

ステップ4:onStart,onStop,onDestroyメソッドの実装
@Override
  protected void onStart() {
    super.onStart();
    mQRCodeView.startCamera();//    
    mQRCodeView.showScanRect();//     
    mQRCodeView.startSpot();//       
    //mQRCodeView.openFlashlight();//  
    //mQRCodeView.closeFlashlight();//  
  }

  @Override
  protected void onStop() {
    mQRCodeView.stopCamera();
    super.onStop();
  }

  @Override
  protected void onDestroy() {
    mQRCodeView.onDestroy();
    super.onDestroy();
  }

  private void vibrate() {
    Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
    vibrator.vibrate(200);
  }

ステップ5:権限の追加



以上の5ステップを経て、スキャン機能はすでに出てきて、ZbarスキャンはZxingより速くて、ZbarはCに基づいて実現して、ZxingはC++に基づいています.問題は、ZbarがQRコードを生成できないことです.統合されたBGAのZxingであれば、QRコードを生成することができます.ZxingがQRコードを生成する方法は以下の通りです.
時間のかかる操作、新しいスレッド
//  
Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode("   ", BGAQRCodeUtil.dp2px(this, 150));

// logo
Bitmap logoBitmap = BitmapFactory.decodeResource(TestGeneratectivity.this.getResources(), R.mipmap.logo);
QRCodeEncoder.syncEncodeQRCode("   ", BGAQRCodeUtil.dp2px(TestGeneratectivity.this, 150), Color.parseColor("#ff0000"), logoBitmap);

画像のQRコードを解析
//mEnglishLogoIv:        
mEnglishLogoIv.setDrawingCacheEnabled(true);
Bitmap bitmap = mEnglishLogoIv.getDrawingCache();

//              null
String result = QRCodeDecoder.syncDecodeQRCode(bitmap);
String result = QRCodeDecoder.syncDecodeQRCode(picturePath);