1. 程式人生 > >Zxing與 Zbar生成二維碼最簡單的實現方式

Zxing與 Zbar生成二維碼最簡單的實現方式

Zxing與 Zbar生成二維碼最簡單的實現方式

匯入依賴

implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.2.1'
或者
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1'

佈局檔案只有個ImageView

 <ImageView
         android:id="@+id/iv"
         android:layout_width="200dp"
         android:layout_height="200dp"
         android:layout_gravity="center"
         />

直接在Activity中用QRCodeEncoder物件的方法即可以實現

public class MainActivity extends AppCompatActivity {
    private ImageView iv;


Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        Bitmap bitmap = (Bitmap) msg.obj;
        iv.setImageBitmap(bitmap);
    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    iv = (ImageView) findViewById(R.id.iv);
    //開執行緒
    new Thread(new Runnable() {
        @Override
        public void run() {
            Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode("我愛你,我的祖國!", 400);
            Message message = handler.obtainMessage();
            message.obj = bitmap;
            handler.sendMessage(message);
        }
    }).start();
}
}

知識點

QRCodeEncoder 建立二維碼圖片。幾個過載方法都是耗時操作,請在子執行緒中呼叫。

/**
 * 同步建立黑色前景色、白色背景色的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content 要生成的二維碼圖片內容
 * @param size    圖片寬高,單位為px
 */
public static Bitmap syncEncodeQRCode(String content, int size)

/**
 * 同步建立指定前景色、白色背景色的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content         要生成的二維碼圖片內容
 * @param size            圖片寬高,單位為px
 * @param foregroundColor 二維碼圖片的前景色
 */
public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor)

/**
 * 同步建立指定前景色、白色背景色、帶logo的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content         要生成的二維碼圖片內容
 * @param size            圖片寬高,單位為px
 * @param foregroundColor 二維碼圖片的前景色
 * @param logo            二維碼圖片的logo
 */
public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, Bitmap logo)

/**
 * 同步建立指定前景色、指定背景色、帶logo的二維碼圖片。該方法是耗時操作,請在子執行緒中呼叫。
 *
 * @param content         要生成的二維碼圖片內容
 * @param size            圖片寬高,單位為px
 * @param foregroundColor 二維碼圖片的前景色
 * @param backgroundColor 二維碼圖片的背景色
 * @param logo            二維碼圖片的logo
 */
public static Bitmap syncEncodeQRCode(String content, int size, int foregroundColor, int backgroundColor, Bitmap logo)

/**
 * 同步建立條形碼圖片
 *
 * @param content  要生成條形碼包含的內容
 * @param width    條形碼的寬度,單位px
 * @param height   條形碼的高度,單位px
 * @param textSize 字型大小,單位px,如果等於0則不在底部繪製文字
 */
public static Bitmap syncEncodeBarcode(String content, int width, int height, int textSize)

介面說明

QRCodeView

/**
 * ZBarView 設定識別的格式。詳細用法請看 zbardemo 的 TestScanActivity 中的 onClick 方法
 *
 * @param barcodeType 識別的格式
 * @param formatList  barcodeType 為 BarcdeType.CUSTOM 時,必須指定該值
 */
public void setType(BarcodeType barcodeType, List<BarcodeFormat> formatList)

/**
 * ZXingView 設定識別的格式。詳細用法請看 zxingdemo TestScanActivity 中的 onClick 方法
 *
 * @param barcodeType 識別的格式
 * @param hintMap     barcodeType 為 BarcodeType.CUSTOM 時,必須指定該值
 */
public void setType(BarcodeType barcodeType, Map<DecodeHintType, Object> hintMap)

/**
 * 設定掃描二維碼的代理
 *
 * @param delegate 掃描二維碼的代理
 */
public void setDelegate(Delegate delegate)

/**
 * 顯示掃描框
 */
public void showScanRect()

/**
 * 隱藏掃描框
 */
public void hiddenScanRect()

/**
 * 開啟後置攝像頭開始預覽,但是並未開始識別
 */
public void startCamera()

/**
 * 開啟指定攝像頭開始預覽,但是並未開始識別
 *
 * @param cameraFacing  Camera.CameraInfo.CAMERA_FACING_BACK or Camera.CameraInfo.CAMERA_FACING_FRONT
 */
public void startCamera(int cameraFacing)

/**
 * 關閉攝像頭預覽,並且隱藏掃描框
 */
public void stopCamera()

/**
 * 延遲0.1秒後開始識別
 */
public void startSpot()

/**
 * 延遲delay毫秒後開始識別
 *
 * @param delay
 */
public void startSpotDelay(int delay)

/**
 * 停止識別
 */
public void stopSpot()

/**
 * 停止識別,並且隱藏掃描框
 */
public void stopSpotAndHiddenRect()

/**
 * 顯示掃描框,並且延遲0.1秒後開始識別
 */
public void startSpotAndShowRect()

/**
 * 開啟閃光燈
 */
public void openFlashlight()

/**
 * 關閉散光燈
 */
public void closeFlashlight()

/**
 * 解析本地圖片二維碼。返回二維碼圖片裡的內容 或 null
 *
 * @param picturePath 要解析的二維碼圖片本地路徑
 */
public void decodeQRCode(String picturePath)

/**
 * 解析 Bitmap 二維碼。返回二維碼圖片裡的內容 或 null
 *
 * @param bitmap 要解析的二維碼圖片
 */
public void decodeQRCode(Bitmap bitmap)

QRCodeView.Delegate 掃描二維碼的代理

/**
 * 處理掃描結果
 *
 * @param result 攝像頭掃碼時只要回調了該方法 result 就一定有值,不會為 null。解析本地圖片或 Bitmap 時 result 可能為 null
 */
void onScanQRCodeSuccess(String result)

/**
 * 攝像頭環境亮度發生變化
 *
 * @param isDark 是否變暗
 */
void onCameraAmbientBrightnessChanged(boolean isDark);

/**
 * 處理開啟相機出錯
 */
void onScanQRCodeOpenCameraError()

可前往GitHub網站諮詢…