Android开源-Zbar扫描(代码比zxing简单N倍,扫描速度也够快是zxing的3~5倍)
liuwl_tj
9年前
<p>我找AndroidZbar的代码找了好久,兄弟们有福了,这是github上的一个基于Zbar的开源库 BGAQRCode (这个库真的很棒)。</p> <h3><strong>代码结构:</strong></h3> <p style="text-align:center"><img src="https://simg.open-open.com/show/c62a2e0effcae4914aeb4e83b42bc515.png"></p> <p style="text-align:center">Paste_Image.png</p> <p>你可以先运行,看下得到的app,反正我没用过zbar,但是看完demoApp就会改代码了,你把它镶嵌入自己的app最多2小时</p> <h2><strong>主要用到的东西:</strong></h2> <h3><strong>MainActivity.java</strong></h3> <p>其实就是跳转界面</p> <h3><strong>TestScanActivity</strong></h3> <pre> <code class="language-java">public class TestScanActivity extends AppCompatActivity implements QRCodeView.Delegate { private static final String TAG = TestScanActivity.class.getSimpleName(); private QRCodeView mQRCodeView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_scan); setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); mQRCodeView = (ZBarView) findViewById(R.id.zbarview); mQRCodeView.setDelegate(this); } @Override protected void onStart() { super.onStart(); mQRCodeView.startCamera(); } @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); } //下面这个方法就是返回扫描结果的 @Override public void onScanQRCodeSuccess(String result) { Log.i(TAG, "result:" + result); Toast.makeText(this, result, Toast.LENGTH_SHORT).show(); vibrate(); mQRCodeView.startSpot(); } @Override public void onScanQRCodeOpenCameraError() { Log.e(TAG, "打开相机出错"); } public void onClick(View v) { switch (v.getId()) { case R.id.start_spot: mQRCodeView.startSpot(); break; case R.id.stop_spot: mQRCodeView.stopSpot(); break; case R.id.start_spot_showrect: mQRCodeView.startSpotAndShowRect(); break; case R.id.stop_spot_hiddenrect: mQRCodeView.stopSpotAndHiddenRect(); break; case R.id.show_rect: mQRCodeView.showScanRect(); break; case R.id.hidden_rect: mQRCodeView.hiddenScanRect(); break; case R.id.start_preview: mQRCodeView.startCamera(); break; case R.id.stop_preview: mQRCodeView.stopCamera(); break; case R.id.open_flashlight: mQRCodeView.openFlashlight(); break; case R.id.close_flashlight: mQRCodeView.closeFlashlight(); break; case R.id.scan_barcode: mQRCodeView.changeToScanBarcodeStyle(); break; case R.id.scan_qrcode: mQRCodeView.changeToScanQRCodeStyle(); break; } }</code></pre> <h3><strong>R.layout.activity_test_scan</strong></h3> <pre> <code class="language-java"><?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" style="@style/MatchMatch"> <cn.bingoogolapple.qrcode.zbar.ZBarView android:id="@+id/zbarview" style="@style/MatchMatch" app:qrcv_animTime="1000" app:qrcv_barCodeTipText="将条码放入框内,即可自动扫描" app:qrcv_barcodeRectHeight="140dp" app:qrcv_borderColor="@android:color/white" app:qrcv_borderSize="1dp" app:qrcv_cornerColor="@color/colorPrimaryDark" app:qrcv_cornerLength="20dp" app:qrcv_cornerSize="3dp" app:qrcv_customGridScanLineDrawable="@mipmap/custom_grid_scan_line" app:qrcv_isBarcode="false" app:qrcv_isOnlyDecodeScanBoxArea="false" app:qrcv_isShowDefaultGridScanLineDrawable="true" app:qrcv_isShowDefaultScanLineDrawable="true" app:qrcv_isShowTipBackground="true" app:qrcv_isShowTipTextAsSingleLine="false" app:qrcv_isTipTextBelowRect="false" app:qrcv_maskColor="#33FFFFFF" app:qrcv_qrCodeTipText="将二维码/条码放入框内,即可自动扫描" app:qrcv_rectWidth="200dp" app:qrcv_scanLineColor="@color/colorPrimaryDark" app:qrcv_toolbarHeight="56dp" app:qrcv_topOffset="90dp" /> <include layout="@layout/toolbar"/> <include layout="@layout/view_control"/> </RelativeLayout></code></pre> <p>基本只要改这上边两个类,代码比zxing简单N倍,扫描速度也够快是zxing的3~5倍(我觉得用zxing的公司可能做了大量代码算法优化,所以他们用zxing),毕竟Zbar基于c,对于单纯的对扫描速度的有要求,就算我们们不优化代码,也满足我们的需要</p> <p> </p> <p> </p>